diff options
author | Alexander Larsson <alexl@redhat.com> | 2020-06-30 12:41:38 +0200 |
---|---|---|
committer | Alexander Larsson <alexander.larsson@gmail.com> | 2020-06-30 16:13:51 +0200 |
commit | d6ea3ab71190e58a98de07ea786adeeda63ed1be (patch) | |
tree | fca47998575ce41bec507848e413e645c6be4e0c | |
parent | 2d8032e555c6fd6dd6790ece48111e16ca6c50a6 (diff) | |
download | flatpak-d6ea3ab71190e58a98de07ea786adeeda63ed1be.tar.gz |
transaction: Break out some code for reuse
This moves the operation normalization code to the
flatpak_transaction_normalize_ops() helper function.
-rw-r--r-- | common/flatpak-transaction.c | 80 |
1 files changed, 45 insertions, 35 deletions
diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index 285222c5..e18dca86 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -224,6 +224,7 @@ enum { LAST_PROGRESS_SIGNAL }; +static void flatpak_transaction_normalize_ops (FlatpakTransaction *self); static gboolean request_required_tokens (FlatpakTransaction *self, const char *optional_remote, GCancellable *cancellable, @@ -3981,13 +3982,55 @@ _run_op_kind (FlatpakTransaction *self, return res; } +/* Ensure the operation kind is normalized and not no-op */ +static void +flatpak_transaction_normalize_ops (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l, *next; + + for (l = priv->ops; l != NULL; l = next) + { + FlatpakTransactionOperation *op = l->data; + next = l->next; + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE) + { + g_autoptr(GBytes) deploy_data = NULL; + + if (dir_ref_is_installed (priv->dir, op->ref, NULL, &deploy_data)) + { + /* Don't use the remote from related ref on update, always use + the current remote. */ + g_free (op->remote); + op->remote = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); + + op->kind = FLATPAK_TRANSACTION_OPERATION_UPDATE; + } + else + op->kind = FLATPAK_TRANSACTION_OPERATION_INSTALL; + } + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_UPDATE && + !flatpak_dir_needs_update_for_commit_and_subpaths (priv->dir, op->remote, op->ref, op->resolved_commit, + (const char **) op->subpaths)) + { + /* If this is a rebase, then at minimum a redeploy needs to happen */ + if (op->previous_ids) + op->update_only_deploy = TRUE; + else + op->skip = TRUE; + } + } +} + static gboolean flatpak_transaction_real_run (FlatpakTransaction *self, GCancellable *cancellable, GError **error) { FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); - GList *l, *next; + GList *l; gboolean succeeded = TRUE; gboolean needs_prune = FALSE; gboolean needs_triggers = FALSE; @@ -4094,40 +4137,7 @@ flatpak_transaction_real_run (FlatpakTransaction *self, sort_ops (self); /* Ensure the operation kind is normalized and not no-op */ - for (l = priv->ops; l != NULL; l = next) - { - FlatpakTransactionOperation *op = l->data; - next = l->next; - - if (op->kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE) - { - g_autoptr(GBytes) deploy_data = NULL; - - if (dir_ref_is_installed (priv->dir, op->ref, NULL, &deploy_data)) - { - /* Don't use the remote from related ref on update, always use - the current remote. */ - g_free (op->remote); - op->remote = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); - - op->kind = FLATPAK_TRANSACTION_OPERATION_UPDATE; - } - else - op->kind = FLATPAK_TRANSACTION_OPERATION_INSTALL; - } - - if (op->kind == FLATPAK_TRANSACTION_OPERATION_UPDATE && - !flatpak_dir_needs_update_for_commit_and_subpaths (priv->dir, op->remote, op->ref, op->resolved_commit, - (const char **) op->subpaths)) - { - /* If this is a rebase, then at minimum a redeploy needs to happen */ - if (op->previous_ids) - op->update_only_deploy = TRUE; - else - op->skip = TRUE; - } - } - + flatpak_transaction_normalize_ops (self); g_signal_emit (self, signals[READY], 0, &ready_res); if (!ready_res) |