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; }
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; }
/** * 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; }
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; }