diff options
author | Matthew Leeds <matthew.leeds@endlessm.com> | 2020-04-10 20:08:25 -0700 |
---|---|---|
committer | Alexander Larsson <alexander.larsson@gmail.com> | 2020-04-16 08:56:39 +0200 |
commit | 112614d28914b0b9935e3d70f0a318310ea27bdb (patch) | |
tree | 0c741af221c5ef645a6a4633d8d8d531ef663ba0 | |
parent | f3c0d3e87ff75734d82cf9a40b18735893770345 (diff) | |
download | flatpak-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.c | 18 |
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)); |