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_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); }