コード例 #1
0
static gboolean
disabled_repos_configure (GHashTable *disabled, GError **error)
{
	const PacmanList *databases;

	g_return_val_if_fail (pacman != NULL, FALSE);

	g_debug ("pacman: reading config from %s", PACMAN_CONFIG_FILE);

	/* read configuration from pacman config file */
	if (!pacman_manager_configure (pacman, PACMAN_CONFIG_FILE, error)) {
		return FALSE;
	}

	local_database = pacman_manager_get_local_database (pacman);

	/* disable disabled repos */
	for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
		const gchar *repo = pacman_database_get_name (database);

		if (g_hash_table_lookup (disabled, repo) != NULL) {
			if (!pacman_manager_unregister_database (pacman, database, error)) {
				return FALSE;
			}

			/* start again as the list gets invalidated */
			databases = pacman_manager_get_sync_databases (pacman);
		}
	}

	return TRUE;
}
コード例 #2
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;
}
コード例 #3
0
/**
 * pacman_manager_find_sync_database:
 * @manager: A #PacmanManager.
 * @name: The name of a sync database.
 *
 * Finds a sync database named @name.
 *
 * Returns: A #PacmanDatabase, or %NULL if none were found.
 */
PacmanDatabase *pacman_manager_find_sync_database (PacmanManager *manager, const gchar *name) {
	const PacmanList *i;
	
	g_return_val_if_fail (manager != NULL, NULL);
	
	for (i = pacman_manager_get_sync_databases (manager); i != NULL; i = pacman_list_next (i)) {
		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (i);
		if (g_strcmp0 (name, pacman_database_get_name (database)) == 0) {
			return database;
		}
	}
	
	return NULL;
}
コード例 #4
0
static gboolean
backend_get_repo_list_thread (PkBackend *backend)
{
	const PacmanList *databases;
	GHashTableIter iter;
	gpointer key, value;

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

	/* emit enabled repos */
	for (databases = pacman_manager_get_sync_databases (pacman); databases != NULL; databases = pacman_list_next (databases)) {
		PacmanDatabase *database = (PacmanDatabase *) pacman_list_get (databases);
		const gchar *repo = pacman_database_get_name (database);

		if (backend_cancelled (backend)) {
			break;
		} else {
			pk_backend_repo_detail (backend, repo, repo, TRUE);
		}
	}

	/* emit disabled repos */
	g_hash_table_iter_init (&iter, disabled_repos);
	while (g_hash_table_iter_next (&iter, &key, &value)) {
		const gchar *repo = (const gchar *) key;

		if (backend_cancelled (backend)) {
			break;
		} else {
			pk_backend_repo_detail (backend, repo, repo, FALSE);
		}
	}

	backend_finished (backend);
	return TRUE;
}