static gchar * alpm_pkg_build_replaces (pmpkg_t *pkg) { const alpm_list_t *i; GString *string = NULL; g_return_val_if_fail (pkg != NULL, NULL); g_return_val_if_fail (localdb != NULL, NULL); /* make a list of the packages that package replaces */ for (i = alpm_pkg_get_replaces (pkg); i != NULL; i = i->next) { pmpkg_t *replaces = alpm_db_get_pkg (localdb, i->data); if (replaces != NULL) { gchar *package = alpm_pkg_build_id (replaces); if (string == NULL) { string = g_string_new (package); } else { g_string_append_printf (string, "&%s", package); } g_free (package); } } if (string != NULL) { return g_string_free (string, FALSE); } else { return NULL; } }
void pk_backend_pkg (PkBackend *self, alpm_pkg_t *pkg, PkInfoEnum info) { gchar *package; g_return_if_fail (self != NULL); g_return_if_fail (pkg != NULL); package = alpm_pkg_build_id (pkg); pk_backend_job_package (self, info, package, alpm_pkg_get_desc (pkg)); g_free (package); }
static void pk_backend_transaction_download_end (PkBackend *self) { g_return_if_fail (self != NULL); g_return_if_fail (dpkg != NULL); pk_backend_pkg (self, dpkg, PK_INFO_ENUM_FINISHED); /* tell DownloadPackages what files were downloaded */ if (dfiles != NULL) { gchar *package_id; package_id = alpm_pkg_build_id (dpkg); pk_backend_job_files (self, package_id, dfiles->str); g_free (package_id); g_string_free (dfiles, TRUE); } dpkg = NULL; dfiles = NULL; }
static gboolean pk_backend_get_update_detail_thread (PkBackend *self) { gchar **packages; GError *error = NULL; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (localdb != NULL, FALSE); packages = pk_backend_get_strv (self, "package_ids"); g_return_val_if_fail (packages != NULL, FALSE); /* collect details about updates */ for (; *packages != NULL; ++packages) { pmpkg_t *pkg, *old; pmdb_t *db; gchar *upgrades, *replaces, *urls; const gchar *reason; PkRestartEnum restart; PkUpdateStateEnum state; GTimeVal built = { 0 }, installed = { 0 }; gchar *issued, *updated; if (pk_backend_cancelled (self)) { break; } pkg = pk_backend_find_pkg (self, *packages, &error); if (pkg == NULL) { break; } old = alpm_db_get_pkg (localdb, alpm_pkg_get_name (pkg)); if (old != NULL) { upgrades = alpm_pkg_build_id (old); if (alpm_pkg_same_pkgver (pkg, old)) { reason = "Update to a newer release"; } else { reason = "Update to a new upstream version"; } } else { upgrades = NULL; reason = "Install to replace an older package"; } db = alpm_pkg_get_db (pkg); replaces = alpm_pkg_build_replaces (pkg); urls = alpm_pkg_build_urls (pkg); if (g_str_has_prefix (alpm_pkg_get_name (pkg), "kernel")) { restart = PK_RESTART_ENUM_SYSTEM; } else { restart = PK_RESTART_ENUM_NONE; } if (g_str_has_suffix (alpm_db_get_name (db), "testing")) { state = PK_UPDATE_STATE_ENUM_TESTING; } else { state = PK_UPDATE_STATE_ENUM_STABLE; } built.tv_sec = alpm_pkg_get_builddate (pkg); if (built.tv_sec > 0) { issued = g_time_val_to_iso8601 (&built); } else { issued = NULL; } if (upgrades != NULL) { installed.tv_sec = alpm_pkg_get_installdate (old); if (installed.tv_sec > 0) { updated = g_time_val_to_iso8601 (&installed); } else { updated = NULL; } } else { updated = NULL; } pk_backend_update_detail (self, *packages, upgrades, replaces, urls, NULL, NULL, restart, reason, NULL, state, issued, updated); g_free (issued); g_free (updated); g_free (urls); g_free (replaces); g_free (upgrades); } return pk_backend_finish (self, error); }