Esempio n. 1
0
static gboolean
backend_get_updates_thread (PkBackend *backend)
{
	struct stat cache;
	time_t one_hour_ago;

	PacmanTransaction *transaction = NULL;
	PacmanTransactionFlags flags = PACMAN_TRANSACTION_FLAGS_NONE;

	const PacmanList *packages;

	g_return_val_if_fail (local_database != NULL, FALSE);
	g_return_val_if_fail (pacman != NULL, FALSE);
	g_return_val_if_fail (backend != NULL, FALSE);

	time (&one_hour_ago);
	one_hour_ago -= 60 * 60;

	/* refresh databases if they are older than an hour */
	if (g_stat (PACMAN_CACHE_PATH, &cache) < 0 || cache.st_mtime < one_hour_ago) {
		transaction = backend_transaction_run (backend, PACMAN_TRANSACTION_UPDATE, flags, NULL);

		if (transaction != NULL) {
			g_object_unref (transaction);
		} else {
			backend_finished (backend);
			return FALSE;
		}
	} else {
		g_debug ("pacman: databases have been refreshed recently");
	}

	/* find outdated and replacement packages */
	for (packages = pacman_database_get_packages (local_database); packages != NULL; packages = pacman_list_next (packages)) {
		PacmanPackage *package = (PacmanPackage *) pacman_list_get (packages);
		PacmanPackage *upgrade = pacman_package_find_upgrade (package, pacman_manager_get_sync_databases (pacman));

		if (backend_cancelled (backend)) {
			break;
		}

		if (upgrade != NULL) {
			PkInfoEnum info;

			if (pacman_package_should_ignore (upgrade)) {
				info = PK_INFO_ENUM_BLOCKED;
			} else if (pacman_package_should_sync_first (upgrade)) {
				info = PK_INFO_ENUM_IMPORTANT;
			} else {
				info = PK_INFO_ENUM_NORMAL;
			}

			backend_package (backend, upgrade, info);
		}
	}

	backend_finished (backend);
	return TRUE;
}
Esempio n. 2
0
/**
 * pacman_manager_find_missing_dependencies:
 * @manager: A #PacmanManager.
 * @remove: A list of #PacmanPackage.
 * @install: A list of #PacmanPackage.
 *
 * Finds dependencies of installed packages that will no longer be satisfied once the packages in @remove are removed and those in @install are installed.
 *
 * Returns: A list of #PacmanMissingDependency. Free the contents with pacman_missing_dependency_free(), then free the list with pacman_list_free().
 */
PacmanList *pacman_manager_find_missing_dependencies (PacmanManager *manager, const PacmanList *remove, const PacmanList *install) {
	PacmanDatabase *database;
	
	g_return_val_if_fail (manager != NULL, NULL);
	
	database = pacman_manager_get_local_database (manager);
	g_return_val_if_fail (database != NULL, NULL);
	
	return alpm_checkdeps ((PacmanList *) pacman_database_get_packages (database), 1, (PacmanList *) remove, (PacmanList *) install);
}