示例#1
0
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);
}
示例#2
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;
}
示例#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;
}
示例#5
0
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;
}