Merge pull request #175 from giuseppe/giuseppe/reboot-after-upgrade

giuseppe/reboot-after-upgrade
This commit is contained in:
Colin Walters 2015-10-08 13:37:57 -04:00
commit 054ceebb76
9 changed files with 107 additions and 21 deletions

View File

@ -49,6 +49,7 @@ get_args_variant (void)
g_variant_dict_init (&dict, NULL);
g_variant_dict_insert (&dict, "skip-purge", "b", opt_skip_purge);
g_variant_dict_insert (&dict, "reboot", "b", opt_reboot);
return g_variant_dict_end (&dict);
}
@ -114,12 +115,6 @@ rpmostree_builtin_rebase (int argc,
g_print ("Run \"systemctl reboot\" to start a reboot\n");
}
else
{
gs_subprocess_simple_run_sync (NULL, GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT,
cancellable, error,
"systemctl", "reboot", NULL);
}
ret = TRUE;

View File

@ -37,6 +37,17 @@ static GOptionEntry option_entries[] = {
{ NULL }
};
static GVariant *
get_args_variant (void)
{
GVariantDict dict;
g_variant_dict_init (&dict, NULL);
g_variant_dict_insert (&dict, "reboot", "b", opt_reboot);
return g_variant_dict_end (&dict);
}
gboolean
rpmostree_builtin_rollback (int argc,
char **argv,
@ -64,6 +75,7 @@ rpmostree_builtin_rollback (int argc,
goto out;
if (!rpmostree_os_call_rollback_sync (os_proxy,
get_args_variant (),
&transaction_address,
cancellable,
error))
@ -89,12 +101,6 @@ rpmostree_builtin_rollback (int argc,
g_print ("Run \"systemctl reboot\" to start a reboot\n");
}
else
{
gs_subprocess_simple_run_sync (NULL, GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT,
cancellable, error,
"systemctl", "reboot", NULL);
}
ret = TRUE;

View File

@ -52,6 +52,7 @@ get_args_variant (void)
g_variant_dict_init (&dict, NULL);
g_variant_dict_insert (&dict, "allow-downgrade", "b", opt_allow_downgrade);
g_variant_dict_insert (&dict, "reboot", "b", opt_reboot);
return g_variant_dict_end (&dict);
}
@ -88,6 +89,13 @@ rpmostree_builtin_upgrade (int argc,
error))
goto out;
if (opt_check_diff && opt_reboot)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"cannot specify both --reboot and --check-diff");
goto out;
}
if (!rpmostree_load_os_proxy (sysroot_proxy, opt_osname,
cancellable, &os_proxy, error))
goto out;
@ -185,13 +193,7 @@ rpmostree_builtin_upgrade (int argc,
{
goto out;
}
if (opt_reboot)
{
gs_subprocess_simple_run_sync (NULL, GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT,
cancellable, error,
"systemctl", "reboot", NULL);
}
else
if (!opt_reboot)
{
const char *sysroot_path;

View File

@ -84,22 +84,32 @@
<!-- Available options:
"allow-downgrade" (type 'b')
"reboot" (type 'b')
-->
<method name="Upgrade">
<arg type="a{sv}" name="options" direction="in"/>
<arg type="s" name="transaction_address" direction="out"/>
</method>
<!-- Available options:
"reboot" (type 'b')
-->
<method name="Rollback">
<arg type="a{sv}" name="options" direction="in"/>
<arg type="s" name="transaction_address" direction="out"/>
</method>
<!-- Available options:
"reboot" (type 'b')
-->
<method name="ClearRollbackTarget">
<arg type="a{sv}" name="options" direction="in"/>
<arg type="s" name="transaction_address" direction="out"/>
</method>
<!-- Available options:
"skip-purge" (type 'b')
"reboot" (type 'b')
-->
<method name="Rebase">
<arg type="a{sv}" name="options" direction="in"/>

View File

@ -511,6 +511,7 @@ os_handle_upgrade (RPMOSTreeOS *interface,
glnx_unref_object GCancellable *cancellable = NULL;
GVariantDict options_dict;
gboolean opt_allow_downgrade = FALSE;
gboolean opt_reboot = FALSE;
const char *osname;
GError *local_error = NULL;
@ -542,6 +543,9 @@ os_handle_upgrade (RPMOSTreeOS *interface,
g_variant_dict_lookup (&options_dict,
"allow-downgrade", "b",
&opt_allow_downgrade);
g_variant_dict_lookup (&options_dict,
"reboot", "b",
&opt_reboot);
g_variant_dict_clear (&options_dict);
@ -549,6 +553,7 @@ os_handle_upgrade (RPMOSTreeOS *interface,
ot_sysroot,
osname,
opt_allow_downgrade,
opt_reboot,
cancellable,
&local_error);
@ -574,13 +579,16 @@ out:
static gboolean
os_handle_rollback (RPMOSTreeOS *interface,
GDBusMethodInvocation *invocation)
GDBusMethodInvocation *invocation,
GVariant *arg_options)
{
RpmostreedOS *self = RPMOSTREED_OS (interface);
glnx_unref_object RpmostreedTransaction *transaction = NULL;
glnx_unref_object OstreeSysroot *ot_sysroot = NULL;
glnx_unref_object GCancellable *cancellable = NULL;
const char *osname;
gboolean opt_reboot = FALSE;
GVariantDict options_dict;
GError *local_error = NULL;
/* If a compatible transaction is in progress, share its bus address. */
@ -604,9 +612,18 @@ os_handle_rollback (RPMOSTreeOS *interface,
osname = rpmostree_os_get_name (interface);
g_variant_dict_init (&options_dict, arg_options);
g_variant_dict_lookup (&options_dict,
"reboot", "b",
&opt_reboot);
g_variant_dict_clear (&options_dict);
transaction = rpmostreed_transaction_new_rollback (invocation,
ot_sysroot,
osname,
opt_reboot,
cancellable,
&local_error);
@ -632,13 +649,16 @@ out:
static gboolean
os_handle_clear_rollback_target (RPMOSTreeOS *interface,
GDBusMethodInvocation *invocation)
GDBusMethodInvocation *invocation,
GVariant *arg_options)
{
RpmostreedOS *self = RPMOSTREED_OS (interface);
glnx_unref_object RpmostreedTransaction *transaction = NULL;
glnx_unref_object OstreeSysroot *ot_sysroot = NULL;
glnx_unref_object GCancellable *cancellable = NULL;
const char *osname;
gboolean opt_reboot = FALSE;
GVariantDict options_dict;
GError *local_error = NULL;
/* If a compatible transaction is in progress, share its bus address. */
@ -660,11 +680,20 @@ os_handle_clear_rollback_target (RPMOSTreeOS *interface,
&local_error))
goto out;
g_variant_dict_init (&options_dict, arg_options);
g_variant_dict_lookup (&options_dict,
"reboot", "b",
&opt_reboot);
g_variant_dict_clear (&options_dict);
osname = rpmostree_os_get_name (interface);
transaction = rpmostreed_transaction_new_clear_rollback (invocation,
ot_sysroot,
osname,
opt_reboot,
cancellable,
&local_error);
@ -703,6 +732,7 @@ os_handle_rebase (RPMOSTreeOS *interface,
GVariantDict options_dict;
gboolean opt_skip_purge = FALSE;
const char *osname;
gboolean opt_reboot = FALSE;
GError *local_error = NULL;
/* If a compatible transaction is in progress, share its bus address. */
@ -733,6 +763,9 @@ os_handle_rebase (RPMOSTreeOS *interface,
g_variant_dict_lookup (&options_dict,
"skip-purge", "b",
&opt_skip_purge);
g_variant_dict_lookup (&options_dict,
"reboot", "b",
&opt_reboot);
g_variant_dict_clear (&options_dict);
@ -741,6 +774,7 @@ os_handle_rebase (RPMOSTreeOS *interface,
osname,
arg_refspec,
opt_skip_purge,
opt_reboot,
cancellable,
&local_error);

View File

@ -287,6 +287,7 @@ rpmostreed_transaction_new_package_diff (GDBusMethodInvocation *invocation,
typedef struct {
RpmostreedTransaction parent;
char *osname;
gboolean reboot;
} RollbackTransaction;
typedef RpmostreedTransactionClass RollbackTransactionClass;
@ -363,6 +364,9 @@ rollback_transaction_execute (RpmostreedTransaction *transaction,
goto out;
}
if (self->reboot)
rpmostreed_reboot (cancellable, error);
ret = TRUE;
out:
@ -389,6 +393,7 @@ RpmostreedTransaction *
rpmostreed_transaction_new_rollback (GDBusMethodInvocation *invocation,
OstreeSysroot *sysroot,
const char *osname,
gboolean reboot,
GCancellable *cancellable,
GError **error)
{
@ -407,6 +412,7 @@ rpmostreed_transaction_new_rollback (GDBusMethodInvocation *invocation,
if (self != NULL)
{
self->osname = g_strdup (osname);
self->reboot = reboot;
}
return (RpmostreedTransaction *) self;
@ -417,6 +423,7 @@ rpmostreed_transaction_new_rollback (GDBusMethodInvocation *invocation,
typedef struct {
RpmostreedTransaction parent;
char *osname;
gboolean reboot;
} ClearRollbackTransaction;
typedef RpmostreedTransactionClass ClearRollbackTransactionClass;
@ -476,6 +483,9 @@ clear_rollback_transaction_execute (RpmostreedTransaction *transaction,
error))
goto out;
if (self->reboot)
rpmostreed_reboot (cancellable, error);
ret = TRUE;
out:
@ -502,6 +512,7 @@ RpmostreedTransaction *
rpmostreed_transaction_new_clear_rollback (GDBusMethodInvocation *invocation,
OstreeSysroot *sysroot,
const char *osname,
gboolean reboot,
GCancellable *cancellable,
GError **error)
{
@ -520,6 +531,7 @@ rpmostreed_transaction_new_clear_rollback (GDBusMethodInvocation *invocation,
if (self != NULL)
{
self->osname = g_strdup (osname);
self->reboot = reboot;
}
return (RpmostreedTransaction *) self;
@ -531,6 +543,7 @@ typedef struct {
RpmostreedTransaction parent;
char *osname;
gboolean allow_downgrade;
gboolean reboot;
} UpgradeTransaction;
typedef RpmostreedTransactionClass UpgradeTransactionClass;
@ -612,6 +625,9 @@ upgrade_transaction_execute (RpmostreedTransaction *transaction,
{
if (!safe_sysroot_upgrader_deploy (upgrader, cancellable, error))
goto out;
if (self->reboot)
rpmostreed_reboot (cancellable, error);
}
else
{
@ -649,6 +665,7 @@ rpmostreed_transaction_new_upgrade (GDBusMethodInvocation *invocation,
OstreeSysroot *sysroot,
const char *osname,
gboolean allow_downgrade,
gboolean reboot,
GCancellable *cancellable,
GError **error)
{
@ -668,6 +685,7 @@ rpmostreed_transaction_new_upgrade (GDBusMethodInvocation *invocation,
{
self->osname = g_strdup (osname);
self->allow_downgrade = allow_downgrade;
self->reboot = reboot;
}
return (RpmostreedTransaction *) self;
@ -680,6 +698,7 @@ typedef struct {
char *osname;
char *refspec;
gboolean skip_purge;
gboolean reboot;
} RebaseTransaction;
typedef RpmostreedTransactionClass RebaseTransactionClass;
@ -781,6 +800,9 @@ rebase_transaction_execute (RpmostreedTransaction *transaction,
goto out;
}
if (self->reboot)
rpmostreed_reboot (cancellable, error);
ret = TRUE;
out:
@ -813,6 +835,7 @@ rpmostreed_transaction_new_rebase (GDBusMethodInvocation *invocation,
const char *osname,
const char *refspec,
gboolean skip_purge,
gboolean reboot,
GCancellable *cancellable,
GError **error)
{
@ -834,6 +857,7 @@ rpmostreed_transaction_new_rebase (GDBusMethodInvocation *invocation,
self->osname = g_strdup (osname);
self->refspec = g_strdup (refspec);
self->skip_purge = skip_purge;
self->reboot = reboot;
}
return (RpmostreedTransaction *) self;

View File

@ -32,6 +32,7 @@ RpmostreedTransaction *
rpmostreed_transaction_new_rollback (GDBusMethodInvocation *invocation,
OstreeSysroot *sysroot,
const char *osname,
gboolean reboot,
GCancellable *cancellable,
GError **error);
@ -39,6 +40,7 @@ RpmostreedTransaction *
rpmostreed_transaction_new_clear_rollback (GDBusMethodInvocation *invocation,
OstreeSysroot *sysroot,
const char *osname,
gboolean reboot,
GCancellable *cancellable,
GError **error);
@ -47,6 +49,7 @@ RpmostreedTransaction *
OstreeSysroot *sysroot,
const char *osname,
gboolean allow_downgrade,
gboolean reboot,
GCancellable *cancellable,
GError **error);
@ -56,5 +59,6 @@ RpmostreedTransaction *
const char *osname,
const char *refspec,
gboolean skip_purge,
gboolean reboot,
GCancellable *cancellable,
GError **error);

View File

@ -20,6 +20,7 @@
#include "rpmostreed-utils.h"
#include "rpmostreed-errors.h"
#include "libgsystem.h"
#include <libglnx.h>
@ -215,3 +216,11 @@ rpmostreed_refspec_parse_partial (const gchar *new_provided_refspec,
out:
return ret;
}
void
rpmostreed_reboot (GCancellable *cancellable, GError **error)
{
gs_subprocess_simple_run_sync (NULL, GS_SUBPROCESS_STREAM_DISPOSITION_INHERIT,
cancellable, error,
"systemctl", "reboot", NULL);
}

View File

@ -34,3 +34,5 @@ gboolean rpmostreed_refspec_parse_partial (const gchar *new_provided_refspec,
gchar *base_refspec,
gchar **out_refspec,
GError **error);
void
rpmostreed_reboot (GCancellable *cancellable, GError **error);