static gboolean pk_backend_update_databases (PkBackend *self, gint force, GError **error) { alpm_cb_download dlcb; alpm_cb_totaldl totaldlcb; const alpm_list_t *i; g_return_val_if_fail (self != NULL, FALSE); if (!pk_backend_transaction_initialize (self, 0, error)) { return FALSE; } alpm_logaction ("synchronizing package lists\n"); dlcb = alpm_option_get_dlcb (); totaldlcb = alpm_option_get_totaldlcb (); /* set total size to minus the number of databases */ i = alpm_option_get_syncdbs (); totaldlcb (-alpm_list_count (i)); for (; i != NULL; i = i->next) { gint result; if (pk_backend_cancelled (self)) { /* pretend to be finished */ i = NULL; break; } result = alpm_db_update (force, i->data); if (result > 0) { /* fake the download when already up to date */ dlcb ("", 1, 1); } else if (result < 0) { g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s", alpm_db_get_name (i->data), alpm_strerrorlast ()); break; } } totaldlcb (0); if (i == NULL) { return pk_backend_transaction_end (self, error); } else { pk_backend_transaction_end (self, NULL); return FALSE; } }
static gboolean pk_backend_install_files_thread (PkBackendJob *self) { gboolean only_trusted; GError *error = NULL; g_return_val_if_fail (self != NULL, FALSE); only_trusted = pk_backend_get_bool (self, "only_trusted"); if (!only_trusted && !pk_backend_disable_signatures (self, &error)) { goto out; } if (pk_backend_transaction_initialize (self, 0, &error) && pk_backend_transaction_add_targets (self, &error) && pk_backend_transaction_simulate (self, &error)) { pk_backend_transaction_commit (self, &error); } out: pk_backend_transaction_end (self, (error == NULL) ? &error : NULL); if (!only_trusted) { GError **e = (error == NULL) ? &error : NULL; pk_backend_enable_signatures (self, e); } return pk_backend_finish (self, error); }
gboolean pk_backend_transaction_finish (PkBackend *self, GError *error) { g_return_val_if_fail (self != NULL, FALSE); pk_backend_transaction_end (self, (error == NULL) ? &error : NULL); return pk_backend_finish (self, error); }