static gchar * pacman_package_make_vendor_url (PacmanPackage *package) { GString *string = g_string_new (""); #ifdef PACMAN_PACKAGE_URL const gchar *name, *arch, *repo, *url; #else const gchar *url; #endif g_return_val_if_fail (package != NULL, NULL); /* grab the URL of the package... */ url = pacman_package_get_url (package); if (url != NULL) { g_string_append_printf (string, "%s;Package website;", url); } #ifdef PACMAN_PACKAGE_URL /* ... and construct the distro URL if possible */ name = pacman_package_get_name (package); arch = pacman_package_get_arch (package); repo = pacman_database_get_name (pacman_package_get_database (package)); g_string_append_printf (string, PACMAN_PACKAGE_URL ";Distribution website;", repo, arch, name); #endif g_string_truncate (string, string->len - 1); return g_string_free (string, FALSE); }
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; }
/** * 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; }
static gboolean backend_get_update_detail_thread (PkBackend *backend) { guint iterator; gchar **package_ids; g_return_val_if_fail (local_database != NULL, FALSE); g_return_val_if_fail (backend != NULL, FALSE); package_ids = pk_backend_get_strv (backend, "package_ids"); g_return_val_if_fail (package_ids != NULL, FALSE); /* collect details about updates */ for (iterator = 0; package_ids[iterator] != NULL; ++iterator) { PacmanPackage *package, *upgrades; PacmanDatabase *database; gchar *upgrades_id, *replaces_ids, *vendor_url; const gchar *message; PkRestartEnum restart; PkUpdateStateEnum state; GTimeVal built = { 0 }, installed = { 0 }; gchar *issued, *updated; if (backend_cancelled (backend)) { break; } package = backend_get_package (backend, package_ids[iterator]); if (package == NULL) { backend_finished (backend); return FALSE; } upgrades = pacman_database_find_package (local_database, pacman_package_get_name (package)); if (upgrades != NULL) { upgrades_id = pacman_package_make_id (upgrades); if (pacman_package_compare_pkgver (package, upgrades) != 0) { message = "Update to newest upstream version"; } else { message = "Update to newest release"; } } else { upgrades_id = NULL; message = "Install as a replacement for an older package"; } database = pacman_package_get_database (package); replaces_ids = pacman_package_make_replaces_ids (package); vendor_url = pacman_package_make_vendor_url (package); if (g_str_has_prefix (pacman_package_get_name (package), "kernel")) { restart = PK_RESTART_ENUM_SYSTEM; } else { restart = PK_RESTART_ENUM_NONE; } if (g_str_has_suffix (pacman_database_get_name (database), "testing")) { state = PK_UPDATE_STATE_ENUM_TESTING; } else { state = PK_UPDATE_STATE_ENUM_STABLE; } built.tv_sec = pacman_package_get_build_date (package); if (built.tv_sec > 0) { issued = g_time_val_to_iso8601 (&built); } else { issued = NULL; } if (upgrades != NULL) { installed.tv_sec = pacman_package_get_install_date (upgrades); if (installed.tv_sec > 0) { updated = g_time_val_to_iso8601 (&installed); } else { updated = NULL; } } else { updated = NULL; } pk_backend_update_detail (backend, package_ids[iterator], upgrades_id, replaces_ids, vendor_url, NULL, NULL, restart, message, NULL, state, issued, updated); g_free (issued); g_free (updated); g_free (vendor_url); g_free (replaces_ids); g_free (upgrades_id); } backend_finished (backend); return TRUE; }