示例#1
0
static gboolean
backend_simulate_remove_packages_thread (PkBackend *backend)
{
	PacmanList *list;
	gboolean autoremove;

	PacmanTransaction *transaction = NULL;
	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_REMOVE_CASCADE;

	g_return_val_if_fail (backend != NULL, FALSE);

	autoremove = pk_backend_get_bool (backend, "autoremove");

	/* remove unneeded packages that were required by those to be removed */
	if (autoremove) {
		flags |= PACMAN_TRANSACTION_FLAGS_REMOVE_RECURSIVE;
	}

	/* prepare the transaction */
	list = backend_remove_list_targets (backend);
	if (list != NULL) {
		transaction = backend_transaction_simulate (backend, PACMAN_TRANSACTION_REMOVE, flags, list);
		pacman_list_free_full (list, g_free);

		if (transaction != NULL) {
			/* emit packages that would have been installed or removed */
			backend_transaction_packages (backend, transaction);
		}
	}

	return backend_transaction_finished (backend, transaction);
}
示例#2
0
static gboolean
backend_remove_packages_thread (PkBackend *backend)
{
	PacmanList *list;
	gboolean allow_deps;
	gboolean autoremove;

	PacmanTransaction *transaction = NULL;
	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;

	g_return_val_if_fail (backend != NULL, FALSE);

	allow_deps = pk_backend_get_bool (backend, "allow_deps");
	autoremove = pk_backend_get_bool (backend, "autoremove");

	/* remove packages that depend on those to be removed */
	if (allow_deps) {
		flags |= PACMAN_TRANSACTION_FLAGS_REMOVE_CASCADE;
	}
	/* remove unneeded packages that were required by those to be removed */
	if (autoremove) {
		flags |= PACMAN_TRANSACTION_FLAGS_REMOVE_RECURSIVE;
	}

	/* run the transaction */
	list = backend_remove_list_targets (backend);
	if (list != NULL) {
		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_REMOVE, flags, list);
		pacman_list_free_full (list, g_free);
	}

	return backend_transaction_finished (backend, transaction);
}
static void pacman_transaction_finalize (GObject *object) {
	PacmanTransactionPrivate *priv;
	
	g_return_if_fail (object != NULL);
	
	priv = PACMAN_TRANSACTION_GET_PRIVATE (PACMAN_TRANSACTION (object));
	pacman_list_free (priv->marked_packages);
	pacman_list_free_full (priv->missing_dependencies, (GDestroyNotify) pacman_missing_dependency_free);
	pacman_list_free_full (priv->conflicts, (GDestroyNotify) pacman_conflict_free);
	pacman_list_free_full (priv->file_conflicts, (GDestroyNotify) pacman_file_conflict_free);
	pacman_list_free (priv->invalid_files);
	
	pacman_transaction_end (NULL);
	pacman_manager_new_transaction (pacman_manager, G_TYPE_NONE);
	
	G_OBJECT_CLASS (pacman_transaction_parent_class)->finalize (object);
}
示例#4
0
/**
 * pacman_manager_set_sync_firsts:
 * @manager: A #PacmanManager.
 * @packages: A list of package names.
 *
 * Sets the list of SyncFirsts to @sync_firsts. See pacman_manager_get_sync_firsts().
 */
void pacman_manager_set_sync_firsts (PacmanManager *manager, PacmanList *packages) {
	PacmanManagerPrivate *priv;
	
	g_return_if_fail (manager != NULL);
	
	priv = PACMAN_MANAGER_GET_PRIVATE (manager);
	pacman_list_free_full (priv->sync_firsts, (GDestroyNotify) g_free);
	priv->sync_firsts = pacman_list_strdup (packages);
}
void pacman_transaction_set_file_conflicts (PacmanTransaction *transaction, PacmanList *conflicts) {
	PacmanTransactionPrivate *priv;
	
	g_return_if_fail (transaction != NULL);
	
	priv = PACMAN_TRANSACTION_GET_PRIVATE (transaction);
	pacman_list_free_full (priv->file_conflicts, (GDestroyNotify) pacman_file_conflict_free);
	priv->file_conflicts = conflicts;
}
void pacman_transaction_set_missing_dependencies (PacmanTransaction *transaction, PacmanList *dependencies) {
	PacmanTransactionPrivate *priv;
	
	g_return_if_fail (transaction != NULL);
	
	priv = PACMAN_TRANSACTION_GET_PRIVATE (transaction);
	pacman_list_free_full (priv->missing_dependencies, (GDestroyNotify) pacman_missing_dependency_free);
	priv->missing_dependencies = dependencies;
}
示例#7
0
static void pacman_manager_finalize (GObject *object) {
	PacmanManagerPrivate *priv;
	
	g_return_if_fail (object != NULL);
	
	priv = PACMAN_MANAGER_GET_PRIVATE (PACMAN_MANAGER (object));
	if (priv->transaction != NULL) {
		g_object_unref (priv->transaction);
	}
	
	g_free (priv->clean_method);
	if (priv->transfer != NULL) {
		g_closure_unref (priv->transfer);
	}
	
	pacman_list_free_full (priv->hold_packages, g_free);
	pacman_list_free_full (priv->sync_firsts, g_free);
	
	pacman_manager = NULL;
	alpm_release ();
	
	G_OBJECT_CLASS (pacman_manager_parent_class)->finalize (object);
}