From a211e4670d4c3f8005416e41cd9a5643dfb1ebe7 Mon Sep 17 00:00:00 2001 From: Jonathan Lebon Date: Wed, 17 Jan 2018 20:25:43 +0000 Subject: [PATCH] app/status: separate state from deployments printing Prep for auto-updates. Use different functions for printing the daemon state and printing the deployments themselves. Closes: #1212 Approved by: cgwalters --- src/app/rpmostree-builtin-status.c | 56 +++++++++++++++++------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/app/rpmostree-builtin-status.c b/src/app/rpmostree-builtin-status.c index 64712b2b..32565e96 100644 --- a/src/app/rpmostree-builtin-status.c +++ b/src/app/rpmostree-builtin-status.c @@ -167,18 +167,37 @@ gv_nevra_to_evr (GString *buffer, PKG_NEVRA_FLAGS_EPOCH_VERSION_RELEASE); } +static gboolean +print_daemon_state (RPMOSTreeSysroot *sysroot_proxy, + GCancellable *cancellable, + GError **error) +{ + glnx_unref_object RPMOSTreeTransaction *txn_proxy = NULL; + if (!rpmostree_transaction_connect_active (sysroot_proxy, NULL, &txn_proxy, + cancellable, error)) + return FALSE; + + g_print ("State: %s", txn_proxy ? "busy" : "idle"); + + if (txn_proxy) + { + const char *title = rpmostree_transaction_get_title (txn_proxy); + g_print ("Transaction: %s\n", title); + } + + return TRUE; +} + /* We will have an optimized path for the case where there are just * two deployments, this code will be the generic fallback. */ static gboolean -status_generic (RPMOSTreeSysroot *sysroot_proxy, - RPMOSTreeOS *os_proxy, - GVariant *deployments, - GCancellable *cancellable, - GError **error) +print_deployments (RPMOSTreeSysroot *sysroot_proxy, + GVariant *deployments, + GCancellable *cancellable, + GError **error) { GVariantIter iter; - gboolean first = TRUE; /* First, gather global state */ gboolean have_any_live_overlay = FALSE; @@ -203,22 +222,11 @@ status_generic (RPMOSTreeSysroot *sysroot_proxy, have_any_live_overlay = have_any_live_overlay || have_live_changes; } - glnx_unref_object RPMOSTreeTransaction *txn_proxy = NULL; - if (!rpmostree_transaction_connect_active (sysroot_proxy, NULL, &txn_proxy, - cancellable, error)) - return FALSE; - - if (txn_proxy) - { - const char *title = rpmostree_transaction_get_title (txn_proxy); - g_print ("State: transaction: %s\n", title); - } - else - g_print ("State: idle\n"); g_print ("Deployments:\n"); g_variant_iter_init (&iter, deployments); + gboolean first = TRUE; while (TRUE) { g_autoptr(GVariant) child = g_variant_iter_next_value (&iter); @@ -599,7 +607,6 @@ rpmostree_builtin_status (int argc, g_autoptr(GOptionContext) context = g_option_context_new (""); glnx_unref_object RPMOSTreeOS *os_proxy = NULL; glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL; - g_autoptr(GVariant) deployments = NULL; _cleanup_peer_ GPid peer_pid = 0; if (!rpmostree_option_context_parse (context, @@ -620,11 +627,10 @@ rpmostree_builtin_status (int argc, return FALSE; } - if (!rpmostree_load_os_proxy (sysroot_proxy, NULL, - cancellable, &os_proxy, error)) + if (!rpmostree_load_os_proxy (sysroot_proxy, NULL, cancellable, &os_proxy, error)) return FALSE; - deployments = rpmostree_sysroot_dup_deployments (sysroot_proxy); + g_autoptr(GVariant) deployments = rpmostree_sysroot_dup_deployments (sysroot_proxy); if (opt_json || opt_jsonpath) { @@ -666,8 +672,10 @@ rpmostree_builtin_status (int argc, } else { - if (!status_generic (sysroot_proxy, os_proxy, deployments, - cancellable, error)) + if (!print_daemon_state (sysroot_proxy, cancellable, error)) + return FALSE; + + if (!print_deployments (sysroot_proxy, deployments, cancellable, error)) return FALSE; }