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
This commit is contained in:
Jonathan Lebon 2018-01-17 20:25:43 +00:00 committed by Atomic Bot
parent 2c270a6644
commit a211e4670d

View File

@ -167,18 +167,37 @@ gv_nevra_to_evr (GString *buffer,
PKG_NEVRA_FLAGS_EPOCH_VERSION_RELEASE); 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 /* We will have an optimized path for the case where there are just
* two deployments, this code will be the generic fallback. * two deployments, this code will be the generic fallback.
*/ */
static gboolean static gboolean
status_generic (RPMOSTreeSysroot *sysroot_proxy, print_deployments (RPMOSTreeSysroot *sysroot_proxy,
RPMOSTreeOS *os_proxy,
GVariant *deployments, GVariant *deployments,
GCancellable *cancellable, GCancellable *cancellable,
GError **error) GError **error)
{ {
GVariantIter iter; GVariantIter iter;
gboolean first = TRUE;
/* First, gather global state */ /* First, gather global state */
gboolean have_any_live_overlay = FALSE; 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; 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_print ("Deployments:\n");
g_variant_iter_init (&iter, deployments); g_variant_iter_init (&iter, deployments);
gboolean first = TRUE;
while (TRUE) while (TRUE)
{ {
g_autoptr(GVariant) child = g_variant_iter_next_value (&iter); 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 (""); g_autoptr(GOptionContext) context = g_option_context_new ("");
glnx_unref_object RPMOSTreeOS *os_proxy = NULL; glnx_unref_object RPMOSTreeOS *os_proxy = NULL;
glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL; glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL;
g_autoptr(GVariant) deployments = NULL;
_cleanup_peer_ GPid peer_pid = 0; _cleanup_peer_ GPid peer_pid = 0;
if (!rpmostree_option_context_parse (context, if (!rpmostree_option_context_parse (context,
@ -620,11 +627,10 @@ rpmostree_builtin_status (int argc,
return FALSE; return FALSE;
} }
if (!rpmostree_load_os_proxy (sysroot_proxy, NULL, if (!rpmostree_load_os_proxy (sysroot_proxy, NULL, cancellable, &os_proxy, error))
cancellable, &os_proxy, error))
return FALSE; return FALSE;
deployments = rpmostree_sysroot_dup_deployments (sysroot_proxy); g_autoptr(GVariant) deployments = rpmostree_sysroot_dup_deployments (sysroot_proxy);
if (opt_json || opt_jsonpath) if (opt_json || opt_jsonpath)
{ {
@ -666,8 +672,10 @@ rpmostree_builtin_status (int argc,
} }
else else
{ {
if (!status_generic (sysroot_proxy, os_proxy, deployments, if (!print_daemon_state (sysroot_proxy, cancellable, error))
cancellable, error)) return FALSE;
if (!print_deployments (sysroot_proxy, deployments, cancellable, error))
return FALSE; return FALSE;
} }