deploy/main: Unify some bits between admin-switch and admin-upgrade
This commit is contained in:
parent
1a20ab4420
commit
d98eb901c4
|
|
@ -73,38 +73,13 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell
|
||||||
if (!ostree_sysroot_load (sysroot, cancellable, error))
|
if (!ostree_sysroot_load (sysroot, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!ot_admin_require_booted_deployment_or_osname (sysroot, opt_osname,
|
|
||||||
cancellable, error))
|
|
||||||
goto out;
|
|
||||||
merge_deployment = ostree_sysroot_get_merge_deployment (sysroot, opt_osname);
|
|
||||||
if (merge_deployment == NULL)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
||||||
"No previous deployment for OS '%s'", opt_osname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
deployment_path = ostree_sysroot_get_deployment_directory (sysroot, merge_deployment);
|
|
||||||
deployment_origin_path = ostree_sysroot_get_deployment_origin_path (deployment_path);
|
|
||||||
|
|
||||||
if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error))
|
if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
origin = ostree_deployment_get_origin (merge_deployment);
|
if (!ot_admin_deploy_prepare (sysroot, opt_osname, &merge_deployment,
|
||||||
if (!origin)
|
&origin_remote, &origin_ref,
|
||||||
{
|
&origin,
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
cancellable, error))
|
||||||
"No origin known for current deployment");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
origin_refspec = g_key_file_get_string (origin, "origin", "refspec", NULL);
|
|
||||||
if (!origin_refspec)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
||||||
"No origin/refspec in current deployment origin; cannot change via ostree");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
if (!ostree_parse_refspec (origin_refspec, &origin_remote, &origin_ref, error))
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (strcmp (origin_ref, new_ref) == 0)
|
if (strcmp (origin_ref, new_ref) == 0)
|
||||||
|
|
@ -114,6 +89,16 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
gs_free char *new_refspec = NULL;
|
||||||
|
if (origin_remote)
|
||||||
|
new_refspec = g_strconcat (origin_remote, ":", new_ref, NULL);
|
||||||
|
else
|
||||||
|
new_refspec = g_strdup (new_ref);
|
||||||
|
g_key_file_unref (origin);
|
||||||
|
origin = ostree_sysroot_origin_new_from_refspec (sysroot, new_refspec);
|
||||||
|
}
|
||||||
|
|
||||||
if (origin_remote)
|
if (origin_remote)
|
||||||
{
|
{
|
||||||
OstreeRepoPullFlags pullflags = 0;
|
OstreeRepoPullFlags pullflags = 0;
|
||||||
|
|
|
||||||
|
|
@ -67,38 +67,14 @@ ot_admin_builtin_upgrade (int argc, char **argv, OstreeSysroot *sysroot, GCancel
|
||||||
if (!ostree_sysroot_load (sysroot, cancellable, error))
|
if (!ostree_sysroot_load (sysroot, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!ot_admin_require_booted_deployment_or_osname (sysroot, opt_osname,
|
|
||||||
cancellable, error))
|
|
||||||
goto out;
|
|
||||||
merge_deployment = ostree_sysroot_get_merge_deployment (sysroot, opt_osname);
|
|
||||||
if (merge_deployment == NULL)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
||||||
"No previous deployment for OS '%s'", opt_osname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
deployment_path = ostree_sysroot_get_deployment_directory (sysroot, merge_deployment);
|
|
||||||
deployment_origin_path = ostree_sysroot_get_deployment_origin_path (deployment_path);
|
|
||||||
|
|
||||||
if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error))
|
if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
origin = ostree_deployment_get_origin (merge_deployment);
|
if (!ot_admin_deploy_prepare (sysroot, opt_osname, &merge_deployment,
|
||||||
if (!origin)
|
&origin_remote, &origin_ref,
|
||||||
{
|
&origin,
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
cancellable, error))
|
||||||
"No origin known for current deployment");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
origin_refspec = g_key_file_get_string (origin, "origin", "refspec", NULL);
|
|
||||||
if (!origin_refspec)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
||||||
"No origin/refspec in current deployment origin; cannot upgrade via ostree");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
if (!ostree_parse_refspec (origin_refspec, &origin_remote, &origin_ref, error))
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (origin_remote)
|
if (origin_remote)
|
||||||
|
|
|
||||||
|
|
@ -106,3 +106,63 @@ ot_admin_complete_deploy_one (OstreeSysroot *sysroot,
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
ot_admin_deploy_prepare (OstreeSysroot *sysroot,
|
||||||
|
const char *osname,
|
||||||
|
OstreeDeployment **out_merge_deployment,
|
||||||
|
char **out_origin_remote,
|
||||||
|
char **out_origin_ref,
|
||||||
|
GKeyFile **out_origin,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
gs_free char *origin_refspec = NULL;
|
||||||
|
gs_free char *origin_remote = NULL;
|
||||||
|
gs_free char *origin_ref = NULL;
|
||||||
|
gs_unref_object GFile *deployment_path = NULL;
|
||||||
|
gs_unref_object GFile *deployment_origin_path = NULL;
|
||||||
|
gs_unref_object OstreeDeployment *merge_deployment = NULL;
|
||||||
|
GKeyFile *origin;
|
||||||
|
|
||||||
|
if (!ot_admin_require_booted_deployment_or_osname (sysroot, osname,
|
||||||
|
cancellable, error))
|
||||||
|
goto out;
|
||||||
|
merge_deployment = ostree_sysroot_get_merge_deployment (sysroot, osname);
|
||||||
|
if (merge_deployment == NULL)
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"No previous deployment for OS '%s'", osname);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
deployment_path = ostree_sysroot_get_deployment_directory (sysroot, merge_deployment);
|
||||||
|
deployment_origin_path = ostree_sysroot_get_deployment_origin_path (deployment_path);
|
||||||
|
|
||||||
|
origin = ostree_deployment_get_origin (merge_deployment);
|
||||||
|
if (!origin)
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"No origin known for current deployment");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
origin_refspec = g_key_file_get_string (origin, "origin", "refspec", NULL);
|
||||||
|
if (!origin_refspec)
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"No origin/refspec in current deployment origin; cannot upgrade via ostree");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (!ostree_parse_refspec (origin_refspec, &origin_remote, &origin_ref, error))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
gs_transfer_out_value (out_merge_deployment, &merge_deployment);
|
||||||
|
gs_transfer_out_value (out_origin_remote, &origin_remote);
|
||||||
|
gs_transfer_out_value (out_origin_ref, &origin_ref);
|
||||||
|
gs_transfer_out_value (out_origin, &origin);
|
||||||
|
out:
|
||||||
|
g_clear_pointer (&origin, g_key_file_unref);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,16 @@ ot_admin_require_booted_deployment_or_osname (OstreeSysroot *sysroot,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
ot_admin_deploy_prepare (OstreeSysroot *sysroot,
|
||||||
|
const char *osname,
|
||||||
|
OstreeDeployment **merge_deployment,
|
||||||
|
char **origin_remote,
|
||||||
|
char **origin_ref,
|
||||||
|
GKeyFile **out_origin,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
ot_admin_complete_deploy_one (OstreeSysroot *sysroot,
|
ot_admin_complete_deploy_one (OstreeSysroot *sysroot,
|
||||||
const char *osname,
|
const char *osname,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue