bin/status: Port to new style
No functional changes; prep for more work. Closes: #1296 Approved by: jlebon
This commit is contained in:
parent
4cda9f14fb
commit
32357cef4d
|
|
@ -41,15 +41,12 @@ static char *
|
||||||
version_of_commit (OstreeRepo *repo, const char *checksum)
|
version_of_commit (OstreeRepo *repo, const char *checksum)
|
||||||
{
|
{
|
||||||
g_autoptr(GVariant) variant = NULL;
|
g_autoptr(GVariant) variant = NULL;
|
||||||
|
|
||||||
/* Shouldn't fail, but if it does, we ignore it */
|
/* Shouldn't fail, but if it does, we ignore it */
|
||||||
if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, checksum,
|
if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, checksum,
|
||||||
&variant, NULL))
|
&variant, NULL))
|
||||||
goto out;
|
return NULL;
|
||||||
|
|
||||||
return ot_admin_checksum_version (variant);
|
return ot_admin_checksum_version (variant);
|
||||||
out:
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
@ -58,61 +55,51 @@ deployment_get_gpg_verify (OstreeDeployment *deployment,
|
||||||
{
|
{
|
||||||
/* XXX Something like this could be added to the OstreeDeployment
|
/* XXX Something like this could be added to the OstreeDeployment
|
||||||
* API in libostree if the OstreeRepo parameter is acceptable. */
|
* API in libostree if the OstreeRepo parameter is acceptable. */
|
||||||
|
GKeyFile *origin = ostree_deployment_get_origin (deployment);
|
||||||
GKeyFile *origin;
|
|
||||||
g_autofree char *refspec = NULL;
|
|
||||||
g_autofree char *remote = NULL;
|
|
||||||
gboolean gpg_verify = FALSE;
|
|
||||||
|
|
||||||
origin = ostree_deployment_get_origin (deployment);
|
|
||||||
|
|
||||||
if (origin == NULL)
|
if (origin == NULL)
|
||||||
goto out;
|
return FALSE;
|
||||||
|
|
||||||
refspec = g_key_file_get_string (origin, "origin", "refspec", NULL);
|
g_autofree char *refspec = g_key_file_get_string (origin, "origin", "refspec", NULL);
|
||||||
|
|
||||||
if (refspec == NULL)
|
if (refspec == NULL)
|
||||||
goto out;
|
return FALSE;
|
||||||
|
|
||||||
|
g_autofree char *remote = NULL;
|
||||||
if (!ostree_parse_refspec (refspec, &remote, NULL, NULL))
|
if (!ostree_parse_refspec (refspec, &remote, NULL, NULL))
|
||||||
goto out;
|
return FALSE;
|
||||||
|
|
||||||
|
gboolean gpg_verify = FALSE;
|
||||||
if (remote)
|
if (remote)
|
||||||
(void) ostree_repo_remote_get_gpg_verify (repo, remote, &gpg_verify, NULL);
|
(void) ostree_repo_remote_get_gpg_verify (repo, remote, &gpg_verify, NULL);
|
||||||
|
|
||||||
out:
|
|
||||||
return gpg_verify;
|
return gpg_verify;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error)
|
ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error)
|
||||||
{
|
{
|
||||||
g_autoptr(GOptionContext) context = NULL;
|
|
||||||
g_autoptr(OstreeSysroot) sysroot = NULL;
|
|
||||||
gboolean ret = FALSE;
|
|
||||||
g_autoptr(OstreeRepo) repo = NULL;
|
|
||||||
OstreeDeployment *booted_deployment = NULL;
|
|
||||||
g_autoptr(OstreeDeployment) pending_deployment = NULL;
|
|
||||||
g_autoptr(OstreeDeployment) rollback_deployment = NULL;
|
|
||||||
g_autoptr(GPtrArray) deployments = NULL;
|
|
||||||
const int is_tty = isatty (1);
|
const int is_tty = isatty (1);
|
||||||
const char *red_bold_prefix = is_tty ? "\x1b[31m\x1b[1m" : "";
|
const char *red_bold_prefix = is_tty ? "\x1b[31m\x1b[1m" : "";
|
||||||
const char *red_bold_suffix = is_tty ? "\x1b[22m\x1b[0m" : "";
|
const char *red_bold_suffix = is_tty ? "\x1b[22m\x1b[0m" : "";
|
||||||
guint i;
|
|
||||||
|
|
||||||
context = g_option_context_new ("");
|
g_autoptr(GOptionContext) context = g_option_context_new ("");
|
||||||
|
|
||||||
|
g_autoptr(OstreeSysroot) sysroot = NULL;
|
||||||
if (!ostree_admin_option_context_parse (context, options, &argc, &argv,
|
if (!ostree_admin_option_context_parse (context, options, &argc, &argv,
|
||||||
OSTREE_ADMIN_BUILTIN_FLAG_UNLOCKED,
|
OSTREE_ADMIN_BUILTIN_FLAG_UNLOCKED,
|
||||||
invocation, &sysroot, cancellable, error))
|
invocation, &sysroot, cancellable, error))
|
||||||
goto out;
|
return FALSE;
|
||||||
|
|
||||||
|
g_autoptr(OstreeRepo) repo = NULL;
|
||||||
if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error))
|
if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error))
|
||||||
goto out;
|
return FALSE;
|
||||||
|
|
||||||
deployments = ostree_sysroot_get_deployments (sysroot);
|
g_autoptr(GPtrArray) deployments = ostree_sysroot_get_deployments (sysroot);
|
||||||
booted_deployment = ostree_sysroot_get_booted_deployment (sysroot);
|
OstreeDeployment *booted_deployment = ostree_sysroot_get_booted_deployment (sysroot);
|
||||||
|
|
||||||
|
g_autoptr(OstreeDeployment) pending_deployment = NULL;
|
||||||
|
g_autoptr(OstreeDeployment) rollback_deployment = NULL;
|
||||||
if (booted_deployment)
|
if (booted_deployment)
|
||||||
ostree_sysroot_query_deployments_for (sysroot, NULL, &pending_deployment,
|
ostree_sysroot_query_deployments_for (sysroot, NULL, &pending_deployment,
|
||||||
&rollback_deployment);
|
&rollback_deployment);
|
||||||
|
|
@ -123,18 +110,13 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < deployments->len; i++)
|
for (guint i = 0; i < deployments->len; i++)
|
||||||
{
|
{
|
||||||
OstreeDeployment *deployment = deployments->pdata[i];
|
OstreeDeployment *deployment = deployments->pdata[i];
|
||||||
GKeyFile *origin;
|
|
||||||
const char *ref = ostree_deployment_get_csum (deployment);
|
const char *ref = ostree_deployment_get_csum (deployment);
|
||||||
OstreeDeploymentUnlockedState unlocked = ostree_deployment_get_unlocked (deployment);
|
|
||||||
g_autofree char *version = version_of_commit (repo, ref);
|
g_autofree char *version = version_of_commit (repo, ref);
|
||||||
g_autoptr(OstreeGpgVerifyResult) result = NULL;
|
|
||||||
guint jj, n_signatures;
|
|
||||||
GError *local_error = NULL;
|
|
||||||
|
|
||||||
origin = ostree_deployment_get_origin (deployment);
|
GKeyFile *origin = ostree_deployment_get_origin (deployment);
|
||||||
|
|
||||||
const char *deployment_status = "";
|
const char *deployment_status = "";
|
||||||
if (deployment == pending_deployment)
|
if (deployment == pending_deployment)
|
||||||
|
|
@ -149,6 +131,8 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
|
||||||
deployment_status);
|
deployment_status);
|
||||||
if (version)
|
if (version)
|
||||||
g_print (" Version: %s\n", version);
|
g_print (" Version: %s\n", version);
|
||||||
|
|
||||||
|
OstreeDeploymentUnlockedState unlocked = ostree_deployment_get_unlocked (deployment);
|
||||||
switch (unlocked)
|
switch (unlocked)
|
||||||
{
|
{
|
||||||
case OSTREE_DEPLOYMENT_UNLOCKED_NONE:
|
case OSTREE_DEPLOYMENT_UNLOCKED_NONE:
|
||||||
|
|
@ -174,8 +158,10 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
|
||||||
g_autoptr(GString) output_buffer = g_string_sized_new (256);
|
g_autoptr(GString) output_buffer = g_string_sized_new (256);
|
||||||
/* Print any digital signatures on this commit. */
|
/* Print any digital signatures on this commit. */
|
||||||
|
|
||||||
result = ostree_repo_verify_commit_ext (repo, ref, NULL, NULL,
|
g_autoptr(GError) local_error = NULL;
|
||||||
cancellable, &local_error);
|
g_autoptr(OstreeGpgVerifyResult) result =
|
||||||
|
ostree_repo_verify_commit_ext (repo, ref, NULL, NULL,
|
||||||
|
cancellable, &local_error);
|
||||||
|
|
||||||
/* G_IO_ERROR_NOT_FOUND just means the commit is not signed. */
|
/* G_IO_ERROR_NOT_FOUND just means the commit is not signed. */
|
||||||
if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
|
if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
|
||||||
|
|
@ -185,13 +171,12 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
|
||||||
}
|
}
|
||||||
else if (local_error != NULL)
|
else if (local_error != NULL)
|
||||||
{
|
{
|
||||||
g_propagate_error (error, local_error);
|
g_propagate_error (error, g_steal_pointer (&local_error));
|
||||||
goto out;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
n_signatures = ostree_gpg_verify_result_count_all (result);
|
const guint n_signatures = ostree_gpg_verify_result_count_all (result);
|
||||||
|
for (guint jj = 0; jj < n_signatures; jj++)
|
||||||
for (jj = 0; jj < n_signatures; jj++)
|
|
||||||
{
|
{
|
||||||
ostree_gpg_verify_result_describe (result, jj, output_buffer, " GPG: ",
|
ostree_gpg_verify_result_describe (result, jj, output_buffer, " GPG: ",
|
||||||
OSTREE_GPG_SIGNATURE_FORMAT_DEFAULT);
|
OSTREE_GPG_SIGNATURE_FORMAT_DEFAULT);
|
||||||
|
|
@ -202,7 +187,5 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = TRUE;
|
return TRUE;
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue