summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Leeds <matthew.leeds@endlessm.com>2020-04-10 20:08:25 -0700
committerAlexander Larsson <alexander.larsson@gmail.com>2020-04-16 08:56:39 +0200
commit112614d28914b0b9935e3d70f0a318310ea27bdb (patch)
tree0c741af221c5ef645a6a4633d8d8d531ef663ba0
parentf3c0d3e87ff75734d82cf9a40b18735893770345 (diff)
downloadflatpak-112614d28914b0b9935e3d70f0a318310ea27bdb.tar.gz
quiet-transaction: Remove side-effect on no-interaction
Currently when you create a FlatpakQuietTransaction object using a FlatpakDir, the dir will have no_interaction set to TRUE even after the transaction runs. I don't think it makes sense to have a side effect like that, and it causes the remote-delete command to fail in the case where it has to uninstall things. So, restore the old no_interaction value during destruction of the FlatpakQuietTransaction. Fixes https://github.com/flatpak/flatpak/issues/3140
-rw-r--r--app/flatpak-quiet-transaction.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/app/flatpak-quiet-transaction.c b/app/flatpak-quiet-transaction.c
index b9d64337..7b0e6f5a 100644
--- a/app/flatpak-quiet-transaction.c
+++ b/app/flatpak-quiet-transaction.c
@@ -34,6 +34,7 @@ struct _FlatpakQuietTransaction
{
FlatpakTransaction parent;
gboolean got_error;
+ gboolean no_interaction_oldvalue;
};
struct _FlatpakQuietTransactionClass
@@ -218,6 +219,17 @@ flatpak_quiet_transaction_run (FlatpakTransaction *transaction,
return TRUE;
}
+static void
+flatpak_quiet_transaction_finalize (GObject *object)
+{
+ FlatpakQuietTransaction *self = FLATPAK_QUIET_TRANSACTION (object);
+ g_autoptr(FlatpakInstallation) installation = NULL;
+
+ installation = flatpak_transaction_get_installation (FLATPAK_TRANSACTION (self));
+ flatpak_installation_set_no_interaction (installation, self->no_interaction_oldvalue);
+
+ G_OBJECT_CLASS (flatpak_quiet_transaction_parent_class)->finalize (object);
+}
static void
flatpak_quiet_transaction_init (FlatpakQuietTransaction *transaction)
@@ -227,8 +239,10 @@ flatpak_quiet_transaction_init (FlatpakQuietTransaction *transaction)
static void
flatpak_quiet_transaction_class_init (FlatpakQuietTransactionClass *class)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
FlatpakTransactionClass *transaction_class = FLATPAK_TRANSACTION_CLASS (class);
+ object_class->finalize = flatpak_quiet_transaction_finalize;
transaction_class->choose_remote_for_ref = choose_remote_for_ref;
transaction_class->add_new_remote = add_new_remote;
transaction_class->new_operation = new_operation;
@@ -243,11 +257,13 @@ flatpak_quiet_transaction_new (FlatpakDir *dir,
{
g_autoptr(FlatpakQuietTransaction) self = NULL;
g_autoptr(FlatpakInstallation) installation = NULL;
+ gboolean no_interaction_oldvalue;
installation = flatpak_installation_new_for_dir (dir, NULL, error);
if (installation == NULL)
return NULL;
+ no_interaction_oldvalue = flatpak_installation_get_no_interaction (installation);
flatpak_installation_set_no_interaction (installation, TRUE);
self = g_initable_new (FLATPAK_TYPE_QUIET_TRANSACTION,
@@ -258,6 +274,8 @@ flatpak_quiet_transaction_new (FlatpakDir *dir,
if (self == NULL)
return NULL;
+ self->no_interaction_oldvalue = no_interaction_oldvalue;
+
flatpak_transaction_add_default_dependency_sources (FLATPAK_TRANSACTION (self));
return FLATPAK_TRANSACTION (g_steal_pointer (&self));