From cc63bcbee7117497c189eb8143fea85109089d88 Mon Sep 17 00:00:00 2001 From: Ruixin Date: Tue, 25 Jul 2017 21:49:10 +0000 Subject: [PATCH] Deployment: add endoflife When commit metadata contains ostree.endoflife attribute, its information will be added to the deployment Variant, which will later be shown as a red & bold message when 'rpm-ostree status' command is called. --- src/app/rpmostree-builtin-status.c | 10 ++++++++++ src/daemon/rpmostreed-deployment-utils.c | 24 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/app/rpmostree-builtin-status.c b/src/app/rpmostree-builtin-status.c index e19eb107ac..7854734166 100644 --- a/src/app/rpmostree-builtin-status.c +++ b/src/app/rpmostree-builtin-status.c @@ -563,6 +563,16 @@ status_generic (RPMOSTreeSysroot *sysroot_proxy, print_kv ("Unlocked", max_key_len, unlocked); g_print ("%s%s", bold_suffix, red_suffix); } + const char *end_of_life_string = NULL; + /* look for endoflife attribute in the deployment */ + g_variant_dict_lookup (dict, "endoflife", "&s", &end_of_life_string); + + if (end_of_life_string) + { + g_print ("%s%s", red_prefix, bold_prefix); + print_kv ("EndOfLife", max_key_len, end_of_life_string); + g_print ("%s%s", bold_suffix, red_suffix); + } } return TRUE; diff --git a/src/daemon/rpmostreed-deployment-utils.c b/src/daemon/rpmostreed-deployment-utils.c index ee8f18163a..d597e5a7a1 100644 --- a/src/daemon/rpmostreed-deployment-utils.c +++ b/src/daemon/rpmostreed-deployment-utils.c @@ -126,6 +126,23 @@ rpmostreed_deployment_generate_blank_variant (void) return g_variant_dict_end (&dict); } +static void +variant_add_metadata_attribute (GVariantDict *dict, + const gchar *attribute, + const gchar *new_attribute, + GVariant *commit) +{ + g_autofree gchar *attribute_string_value = NULL; + g_autoptr(GVariant) metadata = g_variant_get_child_value (commit, 0); + + if (metadata != NULL) + { + g_variant_lookup (metadata, attribute, "s", &attribute_string_value); + if (attribute_string_value != NULL) + g_variant_dict_insert (dict, new_attribute ?: attribute, "s", attribute_string_value); + } +} + static void variant_add_commit_details (GVariantDict *dict, const char *prefix, @@ -227,9 +244,14 @@ rpmostreed_deployment_generate_variant (OstreeSysroot *sysroot, g_variant_dict_insert (&dict, "base-checksum", "s", base_checksum); variant_add_commit_details (&dict, "base-", base_commit); + /* for layered commits, check if their base commit has end of life attribute */ + variant_add_metadata_attribute (&dict, OSTREE_COMMIT_META_KEY_ENDOFLIFE, "endoflife", base_commit); } else - base_checksum = g_strdup (csum); + { + base_checksum = g_strdup (csum); + variant_add_metadata_attribute (&dict, OSTREE_COMMIT_META_KEY_ENDOFLIFE, "endoflife", commit); + } sigs = rpmostreed_deployment_gpg_results (repo, refspec, base_checksum, &gpg_enabled); variant_add_commit_details (&dict, NULL, commit);