[PackageKit-commit] packagekit: Branch 'master' - 35 commits
Richard Hughes
hughsient at kemper.freedesktop.org
Mon Apr 12 11:40:55 PDT 2010
RELEASE | 6
backends/box/pk-backend-box.c | 228 ++--
backends/opkg/pk-backend-opkg.c | 130 +-
backends/yum/Makefile.am | 32
backends/yum/libzif/zif-md-comps.c | 960 ++++++++++++++++++++
backends/yum/libzif/zif-md-comps.h | 78 +
backends/yum/libzif/zif-md-filelists.c | 450 +++++++++
backends/yum/libzif/zif-md-filelists.h | 68 +
backends/yum/libzif/zif-md-metalink.c | 504 ++++++++++
backends/yum/libzif/zif-md-metalink.h | 68 +
backends/yum/libzif/zif-md-mirrorlist.c | 347 +++++++
backends/yum/libzif/zif-md-mirrorlist.h | 67 +
backends/yum/libzif/zif-md-primary-sql.c | 668 ++++++++++++++
backends/yum/libzif/zif-md-primary-sql.h | 64 +
backends/yum/libzif/zif-md-primary-xml.c | 890 +++++++++++++++++++
backends/yum/libzif/zif-md-primary-xml.h | 64 +
backends/yum/libzif/zif-md-updateinfo.c | 763 ++++++++++++++++
backends/yum/libzif/zif-md-updateinfo.h | 73 +
backends/yum/libzif/zif-md.c | 1242 +++++++++++++++++++++++++++
backends/yum/libzif/zif-md.h | 237 +++++
backends/yum/libzif/zif-package.c | 154 +++
backends/yum/libzif/zif-package.h | 7
backends/yum/libzif/zif-repo-md-comps.c | 977 ---------------------
backends/yum/libzif/zif-repo-md-comps.h | 78 -
backends/yum/libzif/zif-repo-md-filelists.c | 449 ---------
backends/yum/libzif/zif-repo-md-filelists.h | 68 -
backends/yum/libzif/zif-repo-md-metalink.c | 503 ----------
backends/yum/libzif/zif-repo-md-metalink.h | 68 -
backends/yum/libzif/zif-repo-md-mirrorlist.c | 347 -------
backends/yum/libzif/zif-repo-md-mirrorlist.h | 67 -
backends/yum/libzif/zif-repo-md-primary.c | 749 ----------------
backends/yum/libzif/zif-repo-md-primary.h | 113 --
backends/yum/libzif/zif-repo-md.c | 931 --------------------
backends/yum/libzif/zif-repo-md.h | 149 ---
backends/yum/libzif/zif-self-test.c | 23
backends/yum/libzif/zif-store-array.c | 6
backends/yum/libzif/zif-store-array.h | 1
backends/yum/libzif/zif-store-remote.c | 462 +++++-----
backends/yum/libzif/zif-store-remote.h | 6
backends/yum/libzif/zif-store.c | 7
backends/yum/libzif/zif-store.h | 2
backends/yum/libzif/zif-update-info.c | 345 +++++++
backends/yum/libzif/zif-update-info.h | 86 +
backends/yum/libzif/zif-update.c | 539 +++++++++++
backends/yum/libzif/zif-update.h | 96 ++
backends/yum/pk-backend-yum.c | 218 ++++
backends/yum/yumBackend.py | 184 +++-
client/pk-console.c | 21
client/pk-generate-pack.c | 6
client/pkcon.xml | 8
configure.ac | 8
contrib/PackageKit.spec.in | 13
lib/packagekit-glib2/pk-control-sync.c | 55 +
lib/packagekit-glib2/pk-control-sync.h | 6
lib/packagekit-glib2/pk-enum.c | 1
lib/packagekit-glib2/pk-enum.h | 1
lib/packagekit-glib2/pk-package-sack.h | 2
lib/packagekit-glib2/pk-package.c | 86 +
lib/packagekit-glib2/pk-package.h | 14
lib/packagekit-glib2/pk-progress.h | 2
lib/packagekit-glib2/pk-results.h | 2
lib/packagekit-glib2/pk-task.c | 1
lib/packagekit-glib2/pk-task.h | 2
po/es.po | 763 +++++++++-------
po/nl.po | 471 +++++-----
po/pl.po | 466 +++++-----
po/sr.po | 277 +++---
po/sr at latin.po | 277 +++---
po/uk.po | 463 +++++-----
src/pk-backend-spawn.c | 2
src/pk-backend.c | 129 +-
src/pk-backend.h | 3
src/pk-engine.c | 93 +-
src/pk-spawn.c | 16
src/pk-transaction-extra.c | 2
src/pk-transaction.c | 50 +
76 files changed, 10479 insertions(+), 6335 deletions(-)
New commits:
commit dcabf9a81c15fc7d590567f8aec1645f0f537620
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Apr 11 08:36:15 2010 +0100
Send a message when other updates are held back so we can add a note to the GUI tool
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 9ccbeff..c85b915 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -2555,6 +2555,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
infra_packages = ['PackageKit', 'yum', 'rpm']
if pkg.name in infra_packages or pkg.name.partition('-')[0] in infra_packages:
infra_pkgs.append(pkg)
+ if len(infra_pkgs) > len(pkgs):
+ self.message(MESSAGE_OTHER_UPDATES_HELD_BACK, "Infrastructure packages take priority")
if len(infra_pkgs) > 0:
msg = []
for pkg in infra_pkgs:
diff --git a/lib/packagekit-glib2/pk-enum.c b/lib/packagekit-glib2/pk-enum.c
index 9d0e678..488eb65 100644
--- a/lib/packagekit-glib2/pk-enum.c
+++ b/lib/packagekit-glib2/pk-enum.c
@@ -225,6 +225,7 @@ static const PkEnumMatch enum_message[] = {
{PK_MESSAGE_ENUM_AUTOREMOVE_IGNORED, "autoremove-ignored"},
{PK_MESSAGE_ENUM_REPO_METADATA_DOWNLOAD_FAILED, "repo-metadata-download-failed"},
{PK_MESSAGE_ENUM_REPO_FOR_DEVELOPERS_ONLY, "repo-for-developers-only"},
+ {PK_MESSAGE_ENUM_OTHER_UPDATES_HELD_BACK, "other-updates-held-back"},
{0, NULL}
};
diff --git a/lib/packagekit-glib2/pk-enum.h b/lib/packagekit-glib2/pk-enum.h
index 72fbea9..96e9974 100644
--- a/lib/packagekit-glib2/pk-enum.h
+++ b/lib/packagekit-glib2/pk-enum.h
@@ -288,6 +288,7 @@ typedef enum {
PK_MESSAGE_ENUM_AUTOREMOVE_IGNORED,
PK_MESSAGE_ENUM_REPO_METADATA_DOWNLOAD_FAILED,
PK_MESSAGE_ENUM_REPO_FOR_DEVELOPERS_ONLY,
+ PK_MESSAGE_ENUM_OTHER_UPDATES_HELD_BACK,
PK_MESSAGE_ENUM_LAST
} PkMessageEnum;
commit a08f9b9a999a7339e8a9ddad1385ed794e606b9d
Author: Grzegorz Dabrowski <grzegorz.dabrowski at gmail.com>
Date: Sun Apr 11 08:55:07 2010 +0200
ported PackageKit to Haiku - http://www.haiku-os.org/
- daemon() exists in libbsd.so library
- there is no setpriority() function
- pid_t is defined as signed long int
Please review pid_t change. I hope that it compiles on FreeBSD.
diff --git a/configure.ac b/configure.ac
index c681855..1a05a94 100644
--- a/configure.ac
+++ b/configure.ac
@@ -254,6 +254,12 @@ AC_PATH_PROG(GMSGFMT, msgfmt, msgfmt)
networking_apis="unix"
dnl ---------------------------------------------------------------------------
+dnl - Haiku compatibility
+dnl ---------------------------------------------------------------------------
+AC_SEARCH_LIBS([daemon], [bsd])
+AC_CHECK_FUNCS(setpriority)
+
+dnl ---------------------------------------------------------------------------
dnl - NetworkManager (default enabled)
dnl ---------------------------------------------------------------------------
AC_ARG_ENABLE(networkmanager, AS_HELP_STRING([--disable-networkmanager],[Disable NetworkManager support]),
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index 568377a..8a11eec 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -59,7 +59,7 @@ static void pk_spawn_finalize (GObject *object);
struct PkSpawnPrivate
{
- gint child_pid;
+ pid_t child_pid;
gint stdin_fd;
gint stdout_fd;
gint stderr_fd;
@@ -205,12 +205,12 @@ pk_spawn_check_child (PkSpawn *spawn)
/* Only print one in twenty times to avoid filling the screen */
if (limit_printing++ % 20 == 0)
- egg_debug ("polling child_pid=%i (1/20)", spawn->priv->child_pid);
+ egg_debug ("polling child_pid=%ld (1/20)", (long)spawn->priv->child_pid);
/* check if the child exited */
pid = waitpid (spawn->priv->child_pid, &status, WNOHANG);
if (pid == -1) {
- egg_warning ("failed to get the child PID data for %i", spawn->priv->child_pid);
+ egg_warning ("failed to get the child PID data for %ld", (long)spawn->priv->child_pid);
return TRUE;
}
if (pid == 0) {
@@ -218,8 +218,8 @@ pk_spawn_check_child (PkSpawn *spawn)
return TRUE;
}
if (pid != spawn->priv->child_pid) {
- egg_warning ("some other process id was returned: got %i and wanted %i",
- pid, spawn->priv->child_pid);
+ egg_warning ("some other process id was returned: got %ld and wanted %ld",
+ (long)pid, (long)spawn->priv->child_pid);
return TRUE;
}
@@ -310,7 +310,7 @@ pk_spawn_sigkill_cb (PkSpawn *spawn)
/* set this in case the script catches the signal and exits properly */
spawn->priv->exit = PK_SPAWN_EXIT_TYPE_SIGKILL;
- egg_debug ("sending SIGKILL %i", spawn->priv->child_pid);
+ egg_debug ("sending SIGKILL %ld", (long)spawn->priv->child_pid);
retval = kill (spawn->priv->child_pid, SIGKILL);
if (retval == EINVAL) {
egg_warning ("The signum argument is an invalid or unsupported number");
@@ -367,7 +367,7 @@ pk_spawn_kill (PkSpawn *spawn)
/* set this in case the script catches the signal and exits properly */
spawn->priv->exit = PK_SPAWN_EXIT_TYPE_SIGQUIT;
- egg_debug ("sending SIGQUIT %i", spawn->priv->child_pid);
+ egg_debug ("sending SIGQUIT %ld", (long)spawn->priv->child_pid);
retval = kill (spawn->priv->child_pid, SIGQUIT);
if (retval == EINVAL) {
egg_warning ("The signum argument is an invalid or unsupported number");
@@ -566,11 +566,13 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)
nice_value = pk_conf_get_int (spawn->priv->conf, key);
nice_value = CLAMP(nice_value, -20, 19);
+#if HAVE_SETPRIORITY
/* don't completely bog the system down */
if (nice_value != 0) {
egg_debug ("renice to %i", nice_value);
setpriority (PRIO_PROCESS, spawn->priv->child_pid, nice_value);
}
+#endif
/* perhaps set idle IO priority */
key = "BackendSpawnIdleIO";
commit 448d8868aeaa08b33e0ab0180a1971893d5f3a3c
Author: Koen Kooi <koen at openembedded.org>
Date: Sat Apr 10 22:17:22 2010 +0200
opkg: include stdio.h before opkg.h to make newer gcc happy
diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c
index d06eab2..be30ad1 100644
--- a/backends/opkg/pk-backend-opkg.c
+++ b/backends/opkg/pk-backend-opkg.c
@@ -27,6 +27,7 @@
#include <pk-backend.h>
#include <egg-debug.h>
+#include <stdio.h>
#include <libopkg/opkg.h>
enum {
commit 1d18e85e5302c92ceae56c58dc4a3b81dc56eb30
Author: Koen Kooi <koen at openembedded.org>
Date: Sat Apr 10 22:16:00 2010 +0200
Fix opkg backend
diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c
index 46e366d..d06eab2 100644
--- a/backends/opkg/pk-backend-opkg.c
+++ b/backends/opkg/pk-backend-opkg.c
@@ -29,8 +29,6 @@
#include <libopkg/opkg.h>
-static opkg_t *opkg;
-
enum {
SEARCH_NAME,
SEARCH_DESCRIPTION,
@@ -62,7 +60,7 @@ opkg_unknown_error (PkBackend *backend, gint error_code, const gchar *failed_cmd
* check an opkg package for known GUI dependancies
*/
static gboolean
-opkg_is_gui_pkg (opkg_package_t *pkg)
+opkg_is_gui_pkg (pkg_t *pkg)
{
/* TODO: check appropriate tag */
@@ -84,7 +82,7 @@ opkg_is_gui_pkg (opkg_package_t *pkg)
* check an opkg package to determine if it is a development package
*/
static gboolean
-opkg_is_devel_pkg (opkg_package_t *pkg)
+opkg_is_devel_pkg (pkg_t *pkg)
{
if (g_strrstr (pkg->name, "-dev"))
return TRUE;
@@ -105,7 +103,7 @@ opkg_is_devel_pkg (opkg_package_t *pkg)
* returns true if the tag is present
*/
static gboolean
-opkg_check_tag (opkg_package_t *pkg, const gchar *tag)
+opkg_check_tag (pkg_t *pkg, const gchar *tag)
{
if (pkg->tags && tag)
return (g_strrstr (pkg->tags, tag) != NULL);
@@ -118,7 +116,7 @@ handle_install_error (PkBackend *backend, int err)
{
switch (err)
{
- case OPKG_NO_ERROR:
+/* case OPKG_NO_ERROR:
break;
case OPKG_PACKAGE_NOT_INSTALLED:
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL);
@@ -140,7 +138,7 @@ handle_install_error (PkBackend *backend, int err)
break;
case OPKG_PACKAGE_NOT_AVAILABLE:
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL);
- break;
+ break;*/
default:
opkg_unknown_error (backend, err, "Update package");
}
@@ -152,7 +150,7 @@ handle_install_error (PkBackend *backend, int err)
static void
backend_initialize (PkBackend *backend)
{
- opkg = opkg_new ();
+ int opkg = opkg_new ();
if (!opkg) {
pk_backend_error_code (backend,
@@ -162,8 +160,8 @@ backend_initialize (PkBackend *backend)
}
#ifdef OPKG_OFFLINE_ROOT
- opkg_set_option (opkg, (char *) "offline_root", OPKG_OFFLINE_ROOT);
- opkg_re_read_config_files (opkg);
+ opkg_set_option ((char *) "offline_root", OPKG_OFFLINE_ROOT);
+ opkg_re_read_config_files ();
#endif
}
@@ -174,22 +172,22 @@ backend_initialize (PkBackend *backend)
static void
backend_destroy (PkBackend *backend)
{
- opkg_free (opkg);
+ opkg_free ();
}
static void
-pk_opkg_progress_cb (opkg_t *_opkg, const opkg_progress_data_t *pdata, void *data)
+pk_opkg_progress_cb (const opkg_progress_data_t *pdata, void *data)
{
- PkBackend *backend = PK_BACKEND (data);
+ PkBackend *backend = (PkBackend*) data;
if (!backend)
return;
pk_backend_set_percentage (backend, pdata->percentage);
- if (pdata->package)
+ if (pdata->pkg)
{
gchar *uid;
- opkg_package_t *pkg = pdata->package;
+ pkg_t *pkg = pdata->pkg;
gint status = PK_INFO_ENUM_UNKNOWN;
uid = g_strdup_printf ("%s;%s;%s;",
@@ -225,12 +223,12 @@ backend_refresh_cache_thread (PkBackend *backend)
{
int ret;
- ret = opkg_update_package_lists (opkg, pk_opkg_progress_cb, backend);
+ ret = opkg_update_package_lists (pk_opkg_progress_cb, backend);
if (ret) {
- if (ret == OPKG_DOWNLOAD_FAILED)
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_AVAILABLE, NULL);
- else
+// if (ret == OPKG_DOWNLOAD_FAILED)
+// pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_AVAILABLE, NULL);
+// else
opkg_unknown_error (backend, ret, "Refreshing cache");
}
pk_backend_finished (backend);
@@ -256,7 +254,7 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
*/
static void
-pk_opkg_package_list_cb (opkg_t *_opkg, opkg_package_t *pkg, void *data)
+pk_opkg_package_list_cb (pkg_t *pkg, void *data)
{
SearchParams *params = (SearchParams*) data;
gchar *uid;
@@ -298,7 +296,7 @@ pk_opkg_package_list_cb (opkg_t *_opkg, opkg_package_t *pkg, void *data)
uid = g_strdup_printf ("%s;%s;%s;",
pkg->name, pkg->version, pkg->architecture);
- if (pkg->installed)
+ if (pkg->state_status == SS_INSTALLED)
status = PK_INFO_ENUM_INSTALLED;
else
status = PK_INFO_ENUM_AVAILABLE;
@@ -318,10 +316,10 @@ pk_opkg_package_list_cb (opkg_t *_opkg, opkg_package_t *pkg, void *data)
opkg_is_gui_pkg (pkg))
goto end_handle;
if (pk_bitfield_contain(filters, PK_FILTER_ENUM_INSTALLED) &&
- (!pkg->installed))
+ (pkg->state_status != SS_INSTALLED))
goto end_handle;
if (pk_bitfield_contain(filters, PK_FILTER_ENUM_NOT_INSTALLED) &&
- (pkg->installed))
+ (pkg->state_status == SS_INSTALLED))
goto end_handle;
pk_backend_package (params->backend, status, uid, pkg->description);
@@ -338,7 +336,7 @@ backend_search_thread (PkBackend *backend)
params = pk_backend_get_pointer (backend, "search-params");
- opkg_list_packages (opkg, pk_opkg_package_list_cb, params);
+ opkg_list_packages (pk_opkg_package_list_cb, params);
pk_backend_finished (params->backend);
@@ -349,7 +347,7 @@ backend_search_thread (PkBackend *backend)
}
static void
-backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_name (PkBackend *backend, PkBitfield filters, gchar **search)
{
SearchParams *params;
@@ -360,7 +358,7 @@ backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search
params = g_new0 (SearchParams, 1);
params->filters = filters;
params->search_type = SEARCH_NAME;
- params->needle = g_utf8_strdown (search, -1);
+ params->needle = g_utf8_strdown (search[0], -1);
params->backend = backend;
pk_backend_set_pointer (backend, "search-params", params);
@@ -371,7 +369,7 @@ backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search
* backend_search_description:
*/
static void
-backend_search_description (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_description (PkBackend *backend, PkBitfield filters, gchar **search)
{
SearchParams *params;
@@ -382,7 +380,7 @@ backend_search_description (PkBackend *backend, PkBitfield filters, const gchar
params = g_new0 (SearchParams, 1);
params->filters = filters;
params->search_type = SEARCH_DESCRIPTION;
- params->needle = g_utf8_strdown (search, -1);
+ params->needle = g_utf8_strdown (search[0], -1);
params->backend = backend;
pk_backend_set_pointer (backend, "search-params", params);
@@ -390,7 +388,7 @@ backend_search_description (PkBackend *backend, PkBitfield filters, const gchar
}
static void
-backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_group (PkBackend *backend, PkBitfield filters, gchar **search)
{
SearchParams *params;
@@ -401,7 +399,7 @@ backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *searc
params = g_new0 (SearchParams, 1);
params->filters = filters;
params->search_type = SEARCH_TAG;
- params->needle = g_strdup_printf ("group::%s", search);
+ params->needle = g_strdup_printf ("group::%s", search[0]);
params->backend = backend;
pk_backend_set_pointer (backend, "search-params", params);
@@ -412,9 +410,9 @@ backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *searc
static gboolean
backend_install_packages_thread (PkBackend *backend)
{
- PkPackageId *pi;
gint err, i;
gchar **package_ids;
+ gchar **parts;
package_ids = pk_backend_get_strv (backend, "pkids");
@@ -424,13 +422,13 @@ backend_install_packages_thread (PkBackend *backend)
{
pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_ids[i], NULL);
- pi = pk_package_id_new_from_string (package_ids[i]);
+ parts = pk_package_id_split (package_ids[i]);
- err = opkg_install_package (opkg, pi->name, pk_opkg_progress_cb, backend);
+ err = opkg_install_package (parts[PK_PACKAGE_ID_NAME], pk_opkg_progress_cb, backend);
if (err)
handle_install_error (backend, err);
- pk_package_id_free (pi);
+ g_strfreev (parts);
if (err != 0)
break;
}
@@ -453,9 +451,9 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
static gboolean
backend_remove_packages_thread (PkBackend *backend)
{
- PkPackageId *pi;
gint err, i;
gchar **package_ids;
+ gchar **parts;
gboolean allow_deps;
gboolean autoremove;
gpointer *data;
@@ -467,29 +465,30 @@ backend_remove_packages_thread (PkBackend *backend)
autoremove = GPOINTER_TO_INT (data[2]);
g_free (data);
- opkg_set_option (opkg, (char *)"autoremove", &autoremove);
- opkg_set_option (opkg, (char *)"force_removal_of_dependent_packages", &allow_deps);
+ opkg_set_option ((char *)"autoremove", &autoremove);
+ opkg_set_option ((char *)"force_removal_of_dependent_packages", &allow_deps);
err = 0;
for (i = 0; package_ids[i]; i++)
{
- pi = pk_package_id_new_from_string (package_ids[i]);
pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[i], NULL);
- err = opkg_remove_package (opkg, pi->name, pk_opkg_progress_cb, backend);
+ parts = pk_package_id_split (package_ids[i]);
+
+ err = opkg_remove_package (parts[PK_PACKAGE_ID_NAME], pk_opkg_progress_cb, backend);
switch (err)
{
- case OPKG_NO_ERROR:
- break;
- case OPKG_PACKAGE_NOT_INSTALLED:
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL);
- break;
+ //case OPKG_NO_ERROR:
+ // break;
+ //case OPKG_PACKAGE_NOT_INSTALLED:
+ // pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL);
+ // break;
default:
opkg_unknown_error (backend, err, "Remove");
}
- pk_package_id_free (pi);
+ g_strfreev (parts);
if (err != 0)
break;
@@ -540,7 +539,7 @@ backend_update_system_thread (PkBackend *backend)
gint err;
/* FIXME: support only_trusted */
- err = opkg_upgrade_all (opkg, pk_opkg_progress_cb, backend);
+ err = opkg_upgrade_all (pk_opkg_progress_cb, backend);
if (err)
opkg_unknown_error (backend, err, "Upgrading system");
@@ -564,29 +563,28 @@ backend_update_system (PkBackend *backend, gboolean only_trusted)
static gboolean
backend_update_package_thread (PkBackend *backend)
{
- PkPackageId *pi;
+ gchar **parts;
gint err = 0;
const gchar *package_id;
/* FIXME: support only_trusted */
package_id = pk_backend_get_string (backend, "pkgid");
- pi = pk_package_id_new_from_string (package_id);
+ parts = pk_package_id_split (package_id);
- if (!pi->name || !pi->version)
+ if (!parts)
{
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
"Package not found");
- pk_package_id_free (pi);
pk_backend_finished (backend);
return FALSE;
}
- err = opkg_upgrade_package (opkg, pi->name, pk_opkg_progress_cb, backend);
+ err = opkg_upgrade_package (parts[PK_PACKAGE_ID_NAME], pk_opkg_progress_cb, backend);
if (err)
handle_install_error (backend, err);
- pk_package_id_free (pi);
+ g_strfreev (parts);
pk_backend_finished (backend);
return (err != 0);
}
@@ -610,13 +608,13 @@ backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **pack
*/
static void
-pk_opkg_list_upgradable_cb (opkg_t *_opkg, opkg_package_t *pkg, void *data)
+pk_opkg_list_upgradable_cb (pkg_t *pkg, void *data)
{
- PkBackend *backend = PK_BACKEND (data);
+ PkBackend *backend = (PkBackend*) data;
gchar *uid;
gint status;
- if (pkg->installed)
+ if (pkg->state_status == SS_INSTALLED)
status = PK_INFO_ENUM_INSTALLED;
else
status = PK_INFO_ENUM_AVAILABLE;
@@ -631,7 +629,7 @@ pk_opkg_list_upgradable_cb (opkg_t *_opkg, opkg_package_t *pkg, void *data)
static gboolean
backend_get_updates_thread (PkBackend *backend)
{
- opkg_list_upgradable_packages (opkg, pk_opkg_list_upgradable_cb, backend);
+ opkg_list_upgradable_packages (pk_opkg_list_upgradable_cb, backend);
pk_backend_finished (backend);
return TRUE;
}
@@ -668,16 +666,18 @@ backend_get_groups (PkBackend *backend)
static gboolean
backend_get_details_thread (PkBackend *backend)
{
- PkPackageId *pi;
gchar **package_ids;
+ gchar **parts;
int group_index;
PkGroupEnum group = 0;
- opkg_package_t *pkg;
+ pkg_t *pkg;
gchar *newid;
package_ids = pk_backend_get_strv(backend, "package_ids");
- pi = pk_package_id_new_from_string (package_ids[0]);
- if (pi == NULL)
+ parts = pk_package_id_split (package_ids[0]);
+
+
+ if (!parts)
{
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
pk_backend_finished (backend);
@@ -685,8 +685,8 @@ backend_get_details_thread (PkBackend *backend)
}
- pkg = opkg_find_package (opkg, pi->name, pi->version, pi->arch, pi->data);
- pk_package_id_free (pi);
+ pkg = opkg_find_package (parts[PK_PACKAGE_ID_NAME], parts[PK_PACKAGE_ID_VERSION], parts[PK_PACKAGE_ID_ARCH], parts[PK_PACKAGE_ID_DATA]);
+ g_strfreev (parts);
if (!pkg)
{
@@ -695,7 +695,7 @@ backend_get_details_thread (PkBackend *backend)
return FALSE;
}
- newid = g_strdup_printf ("%s;%s;%s;%s", pkg->name, pkg->version, pkg->architecture, pkg->repository);
+ newid = g_strdup_printf ("%s;%s;%s;%s", pkg->name, pkg->version, pkg->architecture, pkg->src->name);
if (pkg->tags) {
for (group_index = 0; group < PK_GROUP_ENUM_LAST; group_index++) {
@@ -706,9 +706,8 @@ backend_get_details_thread (PkBackend *backend)
}
}
- pk_backend_details (backend, newid, NULL, group, pkg->description, pkg->url, pkg->size);
+ pk_backend_details (backend, newid, NULL, group, pkg->description, NULL, pkg->size);
g_free (newid);
- opkg_package_free(pkg);
pk_backend_finished (backend);
return TRUE;
}
commit 29dc9f3cf4342f4f8ae8f5c362da61f753fedbe4
Author: Grzegorz Dabrowski <grzegorz.dabrowski at gmail.com>
Date: Sat Apr 10 15:29:34 2010 +0200
updated box backend, now it compiles and works again
diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c
index 9759e69..5d2f507 100644
--- a/backends/box/pk-backend-box.c
+++ b/backends/box/pk-backend-box.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
- * Copyright (C) 2007 Grzegorz DÄ
browski <gdx at o2.pl>
+ * Copyright (C) 2007 Grzegorz DÄ
browski grzegorz.dabrowski at gmail.com>
*
* Licensed under the GNU General Public License Version 2
*
@@ -21,8 +21,6 @@
#include <gmodule.h>
#include <glib.h>
-#include <string.h>
-#include <unistd.h>
#include <pk-backend.h>
#include <egg-debug.h>
@@ -88,7 +86,7 @@ add_packages_from_list (PkBackend *backend, GList *list, gboolean updates)
for (li = list; li != NULL; li = li->next) {
package = (PackageSearch*)li->data;
- pkg_string = pk_package_id_build(package->package, package->version, package->arch, package->reponame);
+ pkg_string = pk_package_id_build (package->package, package->version, package->arch, package->reponame);
if (updates == TRUE)
info = PK_INFO_ENUM_NORMAL;
else if (package->installed)
@@ -96,7 +94,7 @@ add_packages_from_list (PkBackend *backend, GList *list, gboolean updates)
else
info = PK_INFO_ENUM_AVAILABLE;
pk_backend_package (backend, info, pkg_string, package->description);
- g_free(pkg_string);
+ g_free (pkg_string);
}
}
@@ -105,14 +103,18 @@ backend_find_packages_thread (PkBackend *backend)
{
PkBitfield filters;
const gchar *search;
+ gchar **values;
guint mode;
GList *list = NULL;
sqlite3 *db = NULL;
gint filter_box = 0;
+
filters = pk_backend_get_uint (backend, "filters");
mode = pk_backend_get_uint (backend, "mode");
- search = pk_backend_get_string (backend, "search");
+ values = pk_backend_get_strv (backend, "search");
+ /* FIXME: support multiple packages */
+ search = values[0];
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -140,7 +142,7 @@ backend_find_packages_thread (PkBackend *backend)
pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
- db = db_open();
+ db = db_open ();
if (mode == SEARCH_TYPE_FILE) {
list = box_db_repos_search_file_with_filter (db, search, filter_box);
@@ -155,21 +157,57 @@ backend_find_packages_thread (PkBackend *backend)
pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) ||
(!pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED) &&
!pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED))) {
- list = box_db_repos_packages_search_all(db, (gchar *)search, filter_box);
+ list = box_db_repos_packages_search_all (db, (gchar *)search, filter_box);
} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
- list = box_db_repos_packages_search_installed(db, (gchar *)search, filter_box);
+ list = box_db_repos_packages_search_installed (db, (gchar *)search, filter_box);
} else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
- list = box_db_repos_packages_search_available(db, (gchar *)search, filter_box);
+ list = box_db_repos_packages_search_available (db, (gchar *)search, filter_box);
}
add_packages_from_list (backend, list, FALSE);
box_db_repos_package_list_free (list);
}
+ db_close (db);
+ pk_backend_finished (backend);
+ return TRUE;
+}
+
+
+static gboolean
+backend_get_packages_thread (PkBackend *backend)
+{
+ PkBitfield filters;
+ GList *list = NULL;
+ sqlite3 *db = NULL;
+
+ filters = pk_backend_get_uint (backend, "filters");
+
+ pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+
+ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+
+ db = db_open();
+
+ if ((pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED) &&
+ pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) ||
+ (!pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED) &&
+ !pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED))) {
+ list = box_db_repos_packages_search_all (db, NULL, 0);
+ } else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
+ list = box_db_repos_packages_search_installed (db, NULL, 0);
+ } else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
+ list = box_db_repos_packages_search_available (db, NULL, 0);
+ }
+
+ add_packages_from_list (backend, list, FALSE);
+ box_db_repos_package_list_free (list);
+
db_close(db);
pk_backend_finished (backend);
return TRUE;
}
+
static gboolean
backend_get_updates_thread (PkBackend *backend)
{
@@ -204,22 +242,19 @@ backend_update_system_thread (PkBackend *backend)
static gboolean
backend_install_packages_thread (PkBackend *backend)
{
- gboolean result;
- PkPackageId *pi;
+ gboolean result = TRUE;
gchar **package_ids;
+ size_t i;
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
/* FIXME: support only_trusted */
- package_id = pk_backend_get_string (backend, "package_id");
- pi = pk_package_id_new_from_string (package_id);
- if (pi == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_package_id_free (pi);
- return FALSE;
- }
- result = box_package_install(pi->name, ROOT_DIRECTORY, common_progress, backend, FALSE);
+ package_ids = pk_backend_get_strv (backend, "package_ids");
+ for (i = 0; i < g_strv_length (package_ids); i++) {
+ gchar **package_id_data = pk_package_id_split (package_ids[i]);
+ result = box_package_install (package_id_data[PK_PACKAGE_ID_NAME], ROOT_DIRECTORY, common_progress, backend, FALSE);
+ }
pk_backend_finished (backend);
@@ -231,8 +266,7 @@ backend_update_packages_thread (PkBackend *backend)
{
gboolean result = TRUE;
gchar **package_ids;
- PkPackageId *pi;
- gint i;
+ size_t i;
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
/* FIXME: support only_trusted */
@@ -240,15 +274,7 @@ backend_update_packages_thread (PkBackend *backend)
for (i = 0; i < g_strv_length (package_ids); i++)
{
- pi = pk_package_id_new_from_string (package_ids[i]);
- if (pi == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_package_id_free (pi);
- g_strfreev (package_ids);
-
- return FALSE;
- }
- result |= box_package_install(pi->name, ROOT_DIRECTORY, common_progress, backend, FALSE);
+ result |= box_package_install (package_ids[i], ROOT_DIRECTORY, common_progress, backend, FALSE);
}
pk_backend_finished (backend);
@@ -264,7 +290,7 @@ backend_install_files_thread (PkBackend *backend)
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
full_paths = pk_backend_get_strv (backend, "full_paths");
- result = box_package_install(full_paths[0], ROOT_DIRECTORY, common_progress, backend, FALSE);
+ result = box_package_install (full_paths[0], ROOT_DIRECTORY, common_progress, backend, FALSE);
pk_backend_finished (backend);
@@ -274,43 +300,35 @@ backend_install_files_thread (PkBackend *backend)
static gboolean
backend_get_details_thread (PkBackend *backend)
{
- PkPackageId *pi;
PackageSearch *ps;
GList *list;
sqlite3 *db;
gchar **package_ids;
+ gchar **package_id_data;
- package_id = pk_backend_get_string (backend, "package_id");
- db = db_open();
-
- pi = pk_package_id_new_from_string (package_id);
- if (pi == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_package_id_free (pi);
- db_close (db);
+ package_ids = pk_backend_get_strv (backend, "package_ids");
+ /* FIXME: support multiple packages */
+ package_id_data = pk_package_id_split (package_ids[0]);
- return FALSE;
- }
+ db = db_open ();
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
/* only one element is returned */
- list = box_db_repos_packages_search_by_data(db, pi->name, pi->version);
+ list = box_db_repos_packages_search_by_data (db, package_id_data[PK_PACKAGE_ID_NAME], package_id_data[PK_PACKAGE_ID_VERSION]);
if (list == NULL) {
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "cannot find package by id");
- pk_package_id_free (pi);
db_close (db);
return FALSE;
}
ps = (PackageSearch*) list->data;
- pk_backend_details (backend, package_id, "unknown", PK_GROUP_ENUM_OTHER, ps->description, "", 0);
+ pk_backend_details (backend, package_ids[0], "unknown", PK_GROUP_ENUM_OTHER, ps->description, "", 0);
- pk_package_id_free (pi);
box_db_repos_package_list_free (list);
- db_close(db);
+ db_close (db);
pk_backend_finished (backend);
return TRUE;
}
@@ -318,30 +336,22 @@ backend_get_details_thread (PkBackend *backend)
static gboolean
backend_get_files_thread (PkBackend *backend)
{
- PkPackageId *pi;
gchar *files;
sqlite3 *db;
gchar **package_ids;
+ gchar **package_id_data;
db = db_open();
- package_id = pk_backend_get_string (backend, "package_id");
-
- pi = pk_package_id_new_from_string (package_id);
- if (pi == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_package_id_free (pi);
- db_close (db);
-
- return FALSE;
- }
+ package_ids = pk_backend_get_strv (backend, "package_ids");
+ /* FIXME: support multiple packages */
+ package_id_data = pk_package_id_split (package_ids[0]);
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
- files = box_db_repos_get_files_string (db, pi->name, pi->version);
- pk_backend_files (backend, package_id, files);
+ files = box_db_repos_get_files_string (db, package_id_data[PK_PACKAGE_ID_NAME], package_id_data[PK_PACKAGE_ID_VERSION]);
+ pk_backend_files (backend, package_ids[0], files);
- pk_package_id_free (pi);
- db_close(db);
+ db_close (db);
g_free (files);
pk_backend_finished (backend);
@@ -351,34 +361,27 @@ backend_get_files_thread (PkBackend *backend)
static gboolean
backend_get_depends_requires_thread (PkBackend *backend)
{
- PkPackageId *pi;
GList *list = NULL;
sqlite3 *db;
gchar **package_ids;
int deps_type;
+ gchar **package_id_data;
db = db_open ();
- package_id = pk_backend_get_string (backend, "package_id");
+ package_ids = pk_backend_get_strv (backend, "package_ids");
deps_type = pk_backend_get_uint (backend, "type");
-
- pi = pk_package_id_new_from_string (package_id);
- if (pi == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- db_close (db);
-
- return FALSE;
- }
+ /* FIXME: support multiple packages */
+ package_id_data = pk_package_id_split (package_ids[0]);
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
if (deps_type == DEPS_TYPE_DEPENDS)
- list = box_db_repos_get_depends(db, pi->name);
+ list = box_db_repos_get_depends (db, package_id_data[PK_PACKAGE_ID_NAME]);
else if (deps_type == DEPS_TYPE_REQUIRES)
- list = box_db_repos_get_requires(db, pi->name);
+ list = box_db_repos_get_requires (db, package_id_data[PK_PACKAGE_ID_NAME]);
add_packages_from_list (backend, list, FALSE);
box_db_repos_package_list_free (list);
- pk_package_id_free (pi);
db_close (db);
@@ -389,25 +392,20 @@ backend_get_depends_requires_thread (PkBackend *backend)
static gboolean
backend_remove_packages_thread (PkBackend *backend)
{
- PkPackageId *pi;
gchar **package_ids;
+ gchar **package_id_data;
package_ids = pk_backend_get_strv (backend, "package_ids");
- pi = pk_package_id_new_from_string (package_ids[0]);
- if (pi == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
-
- return FALSE;
- }
+ /* FIXME: support multiple packages */
+ package_id_data = pk_package_id_split (package_ids[0]);
pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE);
- if (!box_package_uninstall (pi->name, ROOT_DIRECTORY, common_progress, backend, FALSE))
+ if (!box_package_uninstall (package_id_data[PK_PACKAGE_ID_NAME], ROOT_DIRECTORY, common_progress, backend, FALSE))
{
pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Cannot uninstall");
}
- pk_package_id_free (pi);
pk_backend_finished (backend);
return TRUE;
}
@@ -454,12 +452,24 @@ backend_get_filters (PkBackend *backend)
}
/**
+ * backend_get_mime_types:
+ */
+static gchar *
+backend_get_mime_types (PkBackend *backend)
+{
+ return g_strdup ("application/x-box-package");
+}
+
+
+/**
* backend_get_depends:
*/
static void
backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
{
pk_backend_set_uint (backend, "type", DEPS_TYPE_DEPENDS);
+ pk_backend_set_strv (backend, "package_ids", package_ids);
+ /* TODO: param recursive */
pk_backend_thread_create (backend, backend_get_depends_requires_thread);
}
@@ -469,6 +479,7 @@ backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids
static void
backend_get_details (PkBackend *backend, gchar **package_ids)
{
+ pk_backend_set_strv (backend, "package_ids", package_ids);
pk_backend_thread_create (backend, backend_get_details_thread);
}
@@ -478,16 +489,29 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
static void
backend_get_files (PkBackend *backend, gchar **package_ids)
{
+ pk_backend_set_strv (backend, "package_ids", package_ids);
pk_backend_thread_create (backend, backend_get_files_thread);
}
/**
+ * backend_get_packages:
+ */
+static void
+backend_get_packages (PkBackend *backend, PkBitfield filters)
+{
+ pk_backend_set_uint (backend, "filters", filters);
+ pk_backend_thread_create (backend, backend_get_packages_thread);
+}
+
+/**
* backend_get_requires:
*/
static void
backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
{
pk_backend_set_uint (backend, "type", DEPS_TYPE_REQUIRES);
+ pk_backend_set_strv (backend, "package_ids", package_ids);
+ /* TODO: param recursive */
pk_backend_thread_create (backend, backend_get_depends_requires_thread);
}
@@ -497,6 +521,7 @@ backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_id
static void
backend_get_updates (PkBackend *backend, PkBitfield filters)
{
+ /* TODO: filters */
pk_backend_thread_create (backend, backend_get_updates_thread);
}
@@ -512,6 +537,7 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
pk_backend_finished (backend);
return;
}
+ pk_backend_set_strv (backend, "package_ids", package_ids);
pk_backend_thread_create (backend, backend_install_packages_thread);
}
@@ -520,8 +546,9 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
* backend_install_files:
*/
static void
-backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **files)
+backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
{
+ pk_backend_set_strv (backend, "full_paths", full_paths);
pk_backend_thread_create (backend, backend_install_files_thread);
}
@@ -537,6 +564,7 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
pk_backend_finished (backend);
return;
}
+ /* FIXME: support force */
pk_backend_thread_create (backend, backend_refresh_cache_thread);
}
@@ -544,9 +572,10 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
* backend_remove_packages:
*/
static void
-backend_remove_packages (PkBackend *backend, gchar **package_id, gboolean allow_deps, gboolean autoremove)
+backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
{
pk_backend_set_uint (backend, "type", DEPS_ALLOW);
+ pk_backend_set_strv (backend, "package_ids", package_ids);
pk_backend_thread_create (backend, backend_remove_packages_thread);
}
@@ -554,9 +583,10 @@ backend_remove_packages (PkBackend *backend, gchar **package_id, gboolean allow_
* backend_resolve:
*/
static void
-backend_resolve (PkBackend *backend, PkBitfield filters, const gchar *package)
+backend_resolve (PkBackend *backend, PkBitfield filters, gchar **packages)
{
pk_backend_set_uint (backend, "mode", SEARCH_TYPE_RESOLVE);
+ pk_backend_set_strv (backend, "search", packages);
pk_backend_thread_create (backend, backend_find_packages_thread);
}
@@ -564,19 +594,21 @@ backend_resolve (PkBackend *backend, PkBitfield filters, const gchar *package)
* backend_search_details:
*/
static void
-backend_search_details (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
{
pk_backend_set_uint (backend, "mode", SEARCH_TYPE_DETAILS);
+ pk_backend_set_strv (backend, "search", values);
pk_backend_thread_create (backend, backend_find_packages_thread);
}
/**
- * backend_search_file:
+ * backend_search_files:
*/
static void
-backend_search_file (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
{
pk_backend_set_uint (backend, "mode", SEARCH_TYPE_FILE);
+ pk_backend_set_strv (backend, "search", values);
pk_backend_thread_create (backend, backend_find_packages_thread);
}
@@ -584,9 +616,10 @@ backend_search_file (PkBackend *backend, PkBitfield filters, const gchar *search
* backend_search_name:
*/
static void
-backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
{
pk_backend_set_uint (backend, "mode", SEARCH_TYPE_NAME);
+ pk_backend_set_strv (backend, "search", values);
pk_backend_thread_create (backend, backend_find_packages_thread);
}
@@ -673,7 +706,7 @@ PK_BACKEND_OPTIONS (
NULL, /* get_groups */
backend_get_filters, /* get_filters */
NULL, /* get_roles */
- NULL, /* get_mime_types */
+ backend_get_mime_types, /* get_mime_types */
NULL, /* cancel */
NULL, /* download_packages */
NULL, /* get_categories */
@@ -681,7 +714,7 @@ PK_BACKEND_OPTIONS (
backend_get_details, /* get_details */
NULL, /* get_distro_upgrades */
backend_get_files, /* get_files */
- NULL, /* get_packages */
+ backend_get_packages, /* get_packages */
backend_get_repo_list, /* get_repo_list */
backend_get_requires, /* get_requires */
NULL, /* get_update_detail */
@@ -696,9 +729,9 @@ PK_BACKEND_OPTIONS (
backend_resolve, /* resolve */
NULL, /* rollback */
backend_search_details, /* search_details */
- backend_search_file, /* search_file */
- NULL, /* search_group */
- backend_search_name, /* search_name */
+ backend_search_files, /* search_files */
+ NULL, /* search_groups */
+ backend_search_names, /* search_names */
backend_update_packages, /* update_packages */
backend_update_system, /* update_system */
NULL, /* what_provides */
@@ -707,4 +740,3 @@ PK_BACKEND_OPTIONS (
NULL, /* simulate_remove_packages */
NULL /* simulate_update_packages */
);
-
commit 5fb1ec9abea73ec261b978cc72222306bb5d2532
Author: kmilos <kmilos at fedoraproject.org>
Date: Fri Apr 9 20:45:22 2010 +0000
l10n: Updates to Serbian (Latin) (sr at latin) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/sr at latin.po b/po/sr at latin.po
index bb9bd90..49b7a5d 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PackageKit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-16 19:09+0000\n"
-"PO-Revision-Date: 2010-03-16 20:40+0100\n"
+"POT-Creation-Date: 2010-04-07 19:20+0000\n"
+"PO-Revision-Date: 2010-04-07 23:02-0000\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian <trans-sr at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -23,115 +23,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "Transakcija"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "Sistemsko vreme"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "Uspela"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "TaÄno"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "NetaÄno"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "Radnja"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "Trajanje"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(sekundi)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Komandna linija"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "KorisniÄki IB"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "KorisniÄko ime"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "Stvarno ime"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "ObuhvaÄeni paketi:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "ObuhvaÄeni paketi: ni jedan"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "Distribucija"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Vrsta"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "Sažetak"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "Kategorija"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "Identifikator"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "Roditelj"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Naziv"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Ikona"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "Više o nadgradnji:"
@@ -140,7 +140,7 @@ msgstr "Više o nadgradnji:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -151,166 +151,166 @@ msgstr[1] "Paketa"
msgstr[2] "Paketa"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "Ažurira"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "Prevazilazi"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "IzdavaÄ"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Ponovno pokretanje"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "Opis ažuriranja"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "Promene"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "Stanje"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "Izdato"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:511
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Datum ažuriranja"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "UkljuÄena"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "IskljuÄena"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Ponovno pokretanje sistema zahteva paket:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "Neophodno je ponovno pokretanje sesije:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Ponovno pokretanje sistema (bezbednosno) zahteva:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "Neophodno je ponovno pokretanje sesije (bezbednosno):"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Ponovno pokretanje programa zahteva paket:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "Opis paketa"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "Poruka:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Nema datoteka"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Spisak datoteka"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "Procenat"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "Status"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "Rezultati:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Kobna greška"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "Transakcija nije uspela"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "Trenutno nema dostupnih ažuriranja."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "Trenutno nema dostupnih nadgradnji."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "Neophodno je ponovno pokretanje sistema radi završetka ažuriranja."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr ""
"Neophodno je odjavljivanje i ponovna prijava radi završetka ažuriranja."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -319,7 +319,7 @@ msgstr ""
"instalirana važna bezbednosna ažuriranja."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
@@ -328,29 +328,29 @@ msgstr ""
"su instalirana važna bezbednosna ažuriranja."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"OÄekivano je ime paketa, ustvari je dobijena datoteka. PokuÅ¡ajte da "
"upotrebite âpkcon install-local %sâ namesto."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Ova alatka nije mogla pronaÄi nikakve dostupne pakete: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Ova alatka nije mogla pronaÄi instalirani paket: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Ova alatka nije mogla pronaÄi paket: %s"
@@ -359,180 +359,185 @@ msgstr "Ova alatka nije mogla pronaÄi paket: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Ova alatka nije pronašla sve pakete: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "Uslužni program se iznenada prekinuo!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "Tekstualno suÄelje programa PaketKit"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "Naredbe:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr "Datum poslednjeg izvrÅ¡avanja ove radnje nije pronaÄen"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Prikaži verziju programa i završi rad"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "Namesti filter, npr. instalirani"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "ZavrÅ¡i rad bez Äekanja da se poslovi zavrÅ¡e"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instaliraj pakete bez pitanja za potvrdu"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"IzvrÅ¡i naredbu koristeÄi neiskoriÅ¡Äeni mrežni opseg i takoÄe troÅ¡eÄi manje "
"energije"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
"Å tampaj izlaz Äitljiv maÅ¡ini na ekranu, umesto upotrebe animiranih vidžeta"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Neuspešno kontaktiranje PaketKita."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "Proksi nije mogao da bude postavljen"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "Navedeni filter nije ispravan"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "Morate navesti vrstu pretrage, npr. po imenu"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "Morate navesti termin za pretragu"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "Neispravna vrsta pretrage"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "Neophodno je ime paketa za instalaciju"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "Neophodno je ime datoteke za instalaciju"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "Morate navesti vrstu, IB kljuÄa i IB paketa (key_id i package_id)"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "Morate navesti naziv paketa za uklanjanje"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "Neophodni su odredišni direktorijum i imena paketa za preuzimanje"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "Direktorijum nije naÄen"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "Morete navesti identifikator licence (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "Morate navesti identifikator transakcije (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "Morate navesti ime paketa za razrešavanje"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "Morate navesti ime riznice"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "Morate navesti ime, parametar i vrednost riznice"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "Morate navesti radnju, npr. âupdate-systemâ (ažuriranje sistema)"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "Morate navesti važeÄu radnju"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Morate navesti ime paketa"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "Morate navesti âprovideâ niz (Å¡ta paket pruža)"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "Opcija â%sâ nije podržana"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "Naredba nije uspela"
@@ -543,11 +548,10 @@ msgstr "Postavite ime datoteke za meÄuzavisnosti koje Äe biti izostavljene"
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr ""
-"Direktorijum za izlaznu datoteku (tekuÄi direktorijum se koristiti ako nije "
-"naveden)"
+"Izlazna datoteka ili direktorijum (koristi se tekuÄi direktorijum ako je "
+"izostavljeno)"
#. TRANSLATORS: put a list of packages in the pack
#: ../client/pk-generate-pack.c:261
@@ -574,9 +578,9 @@ msgstr "Obe opcije izabrane."
msgid "A output directory or file name is required"
msgstr "Morate navesti ime izlazne datoteke ili direktorijuma"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
+msgid "The daemon failed to startup"
msgstr "Demon nije uspeo da se pokrene"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
@@ -647,12 +651,12 @@ msgstr "Servisna grupa je napravljena â%sâ"
msgid "Failed to create '%s': %s"
msgstr "Neuspelo pravljenje â%sâ: %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "Neuspeo pokušaj dobavljanja stanja demona"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "PaketKit redar"
@@ -711,42 +715,42 @@ msgid "Installing..."
msgstr "Instaliram..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "Preuzimam detalje o izvorima softvera."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr "Preuzimam spiskove datoteka (ovo može da potraje dok se ne završi)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "Äekanje na zakljuÄavanje upravnika paketa."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "UÄitavam spisak paketa."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Datoteka nije pronaÄena"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Neuspešno pokretanje:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "Neuspešna instalacija paketa"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "PaketKit naredba nije naÄena"
@@ -756,51 +760,51 @@ msgid "Command not found."
msgstr "Naredba nije naÄena."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "SliÄna naredba je:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "Pokreni sliÄnu naredbu:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "SliÄne naredbe su:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "Izaberite naredbu za pokretanje"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "Paket koji pruža ovu datoteku je:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "Da instaliram paket â%sâ koji pruža naredbu â%sâ?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "Paketi koji pružaju ovu datoteku su:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "Prikladni paketi su:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "Izaberite paket za instalaciju"
@@ -1994,25 +1998,25 @@ msgid "Show debugging information for all files"
msgstr "Prikaži informacije o otklonu grešaka za sve datoteke"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "Otklon greÅ¡aka ovih izriÄitih modula"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "Otklon greÅ¡aka ovih izriÄitih funkcija"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "Zapiši podatke o otklonu grešaka u datoteku"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "Opcije za otklon grešaka"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "Prikaži opcije za otklon grešaka"
@@ -2119,9 +2123,6 @@ msgstr "Prikaži opcije za otklon grešaka"
#~ msgid "Incorrect privileges for this operation"
#~ msgstr "Neispravna ovlaÅ¡Äenja za ovu operaciju"
-#~ msgid "The package could not be found"
-#~ msgstr "Paket nije naÄen"
-
#~ msgid "You need to specify a search type, e.g. name"
#~ msgstr "Morate navesti vrstu pretrage, npr. ime"
commit d0c0f27a68e67ab2d4b64348cf48e8ea65cd23d4
Author: Richard Hughes <richard at hughsie.com>
Date: Thu Apr 8 19:17:22 2010 +0100
Correctly fallback by checking the transaction role, not the backend role. Fixes fd#27527
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 25a5534..3b2b670 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -121,6 +121,7 @@ struct _PkBackendPrivate
PkNetwork *network;
PkResults *results;
PkRoleEnum role; /* this never changes for the lifetime of a transaction */
+ PkRoleEnum transaction_role;
PkStatusEnum status; /* this changes */
PkStore *store;
PkTime *time;
@@ -982,10 +983,10 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
summary_safe = pk_backend_strsafe (summary);
/* fix up available and installed when doing simulate roles */
- if (backend->priv->role == PK_ROLE_ENUM_SIMULATE_INSTALL_FILES ||
- backend->priv->role == PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES ||
- backend->priv->role == PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES ||
- backend->priv->role == PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES) {
+ if (backend->priv->transaction_role == PK_ROLE_ENUM_SIMULATE_INSTALL_FILES ||
+ backend->priv->transaction_role == PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES ||
+ backend->priv->transaction_role == PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES ||
+ backend->priv->transaction_role == PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES) {
if (info == PK_INFO_ENUM_AVAILABLE)
info = PK_INFO_ENUM_INSTALLING;
else if (info == PK_INFO_ENUM_INSTALLED)
@@ -1927,14 +1928,11 @@ pk_backend_get_allow_cancel (PkBackend *backend)
}
/**
- * pk_backend_set_role:
+ * pk_backend_set_role_internal:
**/
-gboolean
-pk_backend_set_role (PkBackend *backend, PkRoleEnum role)
+static gboolean
+pk_backend_set_role_internal (PkBackend *backend, PkRoleEnum role)
{
- g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
- g_return_val_if_fail (backend->priv->locked != FALSE, FALSE);
-
/* Should only be called once... */
if (backend->priv->role != PK_ROLE_ENUM_UNKNOWN) {
egg_warning ("cannot set role more than once, already %s",
@@ -1952,6 +1950,23 @@ pk_backend_set_role (PkBackend *backend, PkRoleEnum role)
}
/**
+ * pk_backend_set_role:
+ **/
+gboolean
+pk_backend_set_role (PkBackend *backend, PkRoleEnum role)
+{
+ g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
+ g_return_val_if_fail (backend->priv->locked != FALSE, FALSE);
+
+ /* the role of the transaction can be different to the role of the backend if:
+ * - we reuse the backend for instance searching for files before UpdatePackages
+ * - we are simulating the SimulateInstallPackages with a GetDepends call */
+ egg_debug ("setting transaction role to %s", pk_role_enum_to_string (role));
+ backend->priv->transaction_role = role;
+ return pk_backend_set_role_internal (backend, role);
+}
+
+/**
* pk_backend_set_exit_code:
*
* Should only be used internally, or from PkRunner when setting CANCELLED.
@@ -2639,6 +2654,7 @@ pk_backend_reset (PkBackend *backend)
backend->priv->status = PK_STATUS_ENUM_UNKNOWN;
backend->priv->exit = PK_EXIT_ENUM_UNKNOWN;
backend->priv->role = PK_ROLE_ENUM_UNKNOWN;
+ backend->priv->transaction_role = PK_ROLE_ENUM_UNKNOWN;
backend->priv->last_remaining = 0;
backend->priv->last_percentage = PK_BACKEND_PERCENTAGE_DEFAULT;
backend->priv->last_subpercentage = PK_BACKEND_PERCENTAGE_INVALID;
@@ -2676,7 +2692,7 @@ void
pk_backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_DOWNLOAD_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_DOWNLOAD_PACKAGES);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
pk_store_set_string (backend->priv->store, "directory", directory);
backend->priv->desc->download_packages (backend, package_ids, directory);
@@ -2689,7 +2705,7 @@ void
pk_backend_get_categories (PkBackend *backend)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_CATEGORIES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_CATEGORIES);
backend->priv->desc->get_categories (backend);
}
@@ -2700,7 +2716,7 @@ void
pk_backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_DEPENDS);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_DEPENDS);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
pk_store_set_bool (backend->priv->store, "recursive", recursive);
@@ -2714,7 +2730,7 @@ void
pk_backend_get_details (PkBackend *backend, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_DETAILS);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_DETAILS);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->get_details (backend, package_ids);
}
@@ -2726,7 +2742,7 @@ void
pk_backend_get_distro_upgrades (PkBackend *backend)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_DISTRO_UPGRADES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_DISTRO_UPGRADES);
backend->priv->desc->get_distro_upgrades (backend);
}
@@ -2737,7 +2753,7 @@ void
pk_backend_get_files (PkBackend *backend, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_FILES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_FILES);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->get_files (backend, package_ids);
}
@@ -2749,7 +2765,7 @@ void
pk_backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_REQUIRES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_REQUIRES);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
pk_store_set_bool (backend->priv->store, "recursive", recursive);
@@ -2763,7 +2779,7 @@ void
pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_UPDATE_DETAIL);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_UPDATE_DETAIL);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->get_update_detail (backend, package_ids);
}
@@ -2775,7 +2791,7 @@ void
pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_UPDATES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_UPDATES);
pk_store_set_uint (backend->priv->store, "filters", filters);
backend->priv->desc->get_updates (backend, filters);
}
@@ -2787,7 +2803,7 @@ void
pk_backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_INSTALL_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_INSTALL_PACKAGES);
pk_store_set_bool (backend->priv->store, "only_trusted", only_trusted);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->install_packages (backend, only_trusted, package_ids);
@@ -2800,7 +2816,7 @@ void
pk_backend_install_signature (PkBackend *backend, PkSigTypeEnum type, const gchar *key_id, const gchar *package_id)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_INSTALL_SIGNATURE);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_INSTALL_SIGNATURE);
pk_store_set_string (backend->priv->store, "key_id", key_id);
pk_store_set_string (backend->priv->store, "package_id", package_id);
backend->priv->desc->install_signature (backend, type, key_id, package_id);
@@ -2813,7 +2829,7 @@ void
pk_backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_INSTALL_FILES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_INSTALL_FILES);
pk_store_set_bool (backend->priv->store, "only_trusted", only_trusted);
pk_store_set_strv (backend->priv->store, "full_paths", full_paths);
backend->priv->desc->install_files (backend, only_trusted, full_paths);
@@ -2826,7 +2842,7 @@ void
pk_backend_refresh_cache (PkBackend *backend, gboolean force)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_REFRESH_CACHE);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_REFRESH_CACHE);
pk_store_set_bool (backend->priv->store, "force", force);
backend->priv->desc->refresh_cache (backend, force);
}
@@ -2838,7 +2854,7 @@ void
pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_REMOVE_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_REMOVE_PACKAGES);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
pk_store_set_bool (backend->priv->store, "allow_deps", allow_deps);
pk_store_set_bool (backend->priv->store, "autoremove", autoremove);
@@ -2852,7 +2868,7 @@ void
pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_RESOLVE);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_RESOLVE);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->resolve (backend, filters, package_ids);
@@ -2865,7 +2881,7 @@ void
pk_backend_rollback (PkBackend *backend, const gchar *transaction_id)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_ROLLBACK);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_ROLLBACK);
pk_store_set_string (backend->priv->store, "transaction_id", transaction_id);
backend->priv->desc->rollback (backend, transaction_id);
}
@@ -2877,7 +2893,7 @@ void
pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SEARCH_DETAILS);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SEARCH_DETAILS);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "search", values);
backend->priv->desc->search_details (backend, filters, values);
@@ -2890,7 +2906,7 @@ void
pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SEARCH_FILE);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SEARCH_FILE);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "search", values);
backend->priv->desc->search_files (backend, filters, values);
@@ -2903,7 +2919,7 @@ void
pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SEARCH_GROUP);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SEARCH_GROUP);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "search", values);
backend->priv->desc->search_groups (backend, filters, values);
@@ -2916,7 +2932,7 @@ void
pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SEARCH_NAME);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SEARCH_NAME);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_strv (backend->priv->store, "search", values);
backend->priv->desc->search_names (backend, filters, values);
@@ -2929,7 +2945,7 @@ void
pk_backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_UPDATE_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_UPDATE_PACKAGES);
pk_store_set_bool (backend->priv->store, "only_trusted", only_trusted);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->update_packages (backend, only_trusted, package_ids);
@@ -2942,7 +2958,7 @@ void
pk_backend_update_system (PkBackend *backend, gboolean only_trusted)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_UPDATE_SYSTEM);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_UPDATE_SYSTEM);
pk_store_set_bool (backend->priv->store, "only_trusted", only_trusted);
backend->priv->desc->update_system (backend, only_trusted);
}
@@ -2954,7 +2970,7 @@ void
pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_REPO_LIST);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_REPO_LIST);
pk_store_set_uint (backend->priv->store, "filters", filters);
backend->priv->desc->get_repo_list (backend, filters);
}
@@ -2966,7 +2982,7 @@ void
pk_backend_repo_enable (PkBackend *backend, const gchar *repo_id, gboolean enabled)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_REPO_ENABLE);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_REPO_ENABLE);
pk_store_set_string (backend->priv->store, "repo_id", repo_id);
pk_store_set_bool (backend->priv->store, "enabled", enabled);
backend->priv->desc->repo_enable (backend, repo_id, enabled);
@@ -2979,7 +2995,7 @@ void
pk_backend_repo_set_data (PkBackend *backend, const gchar *repo_id, const gchar *parameter, const gchar *value)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_REPO_SET_DATA);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_REPO_SET_DATA);
pk_store_set_string (backend->priv->store, "repo_id", repo_id);
pk_store_set_string (backend->priv->store, "parameter", parameter);
pk_store_set_string (backend->priv->store, "value", value);
@@ -2993,7 +3009,7 @@ void
pk_backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_WHAT_PROVIDES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_WHAT_PROVIDES);
pk_store_set_uint (backend->priv->store, "filters", filters);
pk_store_set_uint (backend->priv->store, "provides", provides);
pk_store_set_strv (backend->priv->store, "search", values);
@@ -3007,7 +3023,7 @@ void
pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_GET_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_GET_PACKAGES);
pk_store_set_uint (backend->priv->store, "filters", filters);
backend->priv->desc->get_packages (backend, filters);
}
@@ -3019,7 +3035,7 @@ void
pk_backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SIMULATE_INSTALL_FILES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SIMULATE_INSTALL_FILES);
pk_store_set_strv (backend->priv->store, "full_paths", full_paths);
backend->priv->desc->simulate_install_files (backend, full_paths);
}
@@ -3031,7 +3047,7 @@ void
pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->simulate_install_packages (backend, package_ids);
}
@@ -3043,7 +3059,7 @@ void
pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
pk_store_set_bool (backend->priv->store, "autoremove", autoremove);
backend->priv->desc->simulate_remove_packages (backend, package_ids, autoremove);
@@ -3056,7 +3072,7 @@ void
pk_backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
{
g_return_if_fail (PK_IS_BACKEND (backend));
- pk_backend_set_role (backend, PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES);
+ pk_backend_set_role_internal (backend, PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES);
pk_store_set_strv (backend->priv->store, "package_ids", package_ids);
backend->priv->desc->simulate_update_packages (backend, package_ids);
}
commit 49c62bc75647ca28ce50b92f56e58e12335df115
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 16:20:56 2010 +0100
yum: do not crash when using the newest filter with libzif
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 423b629..32b1846 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -277,7 +277,6 @@ backend_filter_package_array_newest (GPtrArray *array)
/* the package is older than the one we have stored */
if (retval <= 0) {
g_free (key);
- g_object_unref (package);
g_ptr_array_remove (array, package);
continue;
}
commit d1b892ce76a3170389c9a1b85491bcc7aa594308
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 14:36:15 2010 +0100
yum: Add some test code to get the update info using zif
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 58b6bd9..423b629 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -1619,15 +1619,125 @@ backend_get_packages (PkBackend *backend, PkBitfield filters)
}
/**
+ * backend_get_update_detail_thread:
+ */
+static gboolean
+backend_get_update_detail_thread (PkBackend *backend)
+{
+ gchar **package_ids;
+ guint i;
+ guint j;
+ gboolean ret;
+ ZifUpdate *update;
+ ZifCompletion *completion_local;
+ ZifPackage *package;
+ GError *error = NULL;
+
+ /* reset */
+ backend_profile (NULL);
+
+ /* get lock */
+ ret = backend_get_lock (backend);
+ if (!ret) {
+ egg_warning ("failed to get lock");
+ goto out;
+ }
+
+ /* get the data */
+ package_ids = pk_backend_get_strv (backend, "package_ids");
+
+ /* profile */
+ backend_profile ("get lock");
+
+ /* set the network state */
+ backend_setup_network (backend);
+
+ /* setup completion */
+ zif_completion_reset (priv->completion);
+ zif_completion_set_number_steps (priv->completion, g_strv_length (package_ids));
+
+ /* get the update info */
+ for (i=0; package_ids[i] != NULL; i++) {
+
+ package = zif_package_new ();
+ ret = zif_package_set_id (package, package_ids[i]);
+ if (!ret) {
+ g_error ("moo");
+ }
+
+ completion_local = zif_completion_get_child (priv->completion);
+ update = zif_package_get_update_detail (package, priv->cancellable, completion_local, &error);
+ if (update == NULL) {
+ egg_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
+ g_clear_error (&error);
+ } else {
+ GPtrArray *array;
+ GString *string_cve;
+ GString *string_bugzilla;
+ ZifUpdateInfo *info;
+ array = zif_update_get_update_infos (update);
+ string_cve = g_string_new (NULL);
+ string_bugzilla = g_string_new (NULL);
+ for (j=0; j<array->len; j++) {
+ info = g_ptr_array_index (array, j);
+ switch (zif_update_info_get_kind (info)) {
+ case ZIF_UPDATE_INFO_KIND_CVE:
+ g_string_append_printf (string_cve, "%s\t%s\t",
+ zif_update_info_get_title (info),
+ zif_update_info_get_url (info));
+ break;
+ case ZIF_UPDATE_INFO_KIND_BUGZILLA:
+ g_string_append_printf (string_bugzilla, "%s\t%s\t",
+ zif_update_info_get_title (info),
+ zif_update_info_get_url (info));
+ break;
+ default:
+ break;
+ }
+ }
+ pk_backend_update_detail (backend, package_ids[i],
+ NULL, //updates,
+ NULL, //obsoletes,
+ NULL, //vendor_url,
+ string_bugzilla->str,
+ string_cve->str,
+ PK_RESTART_ENUM_NONE,
+ zif_update_get_description (update),
+ NULL, //changelog,
+ zif_update_get_state (update),
+ zif_update_get_issued (update),
+ NULL);
+ g_ptr_array_unref (array);
+ g_string_free (string_cve, TRUE);
+ g_string_free (string_bugzilla, TRUE);
+ }
+
+ g_object_unref (package);
+
+ /* this section done */
+ zif_completion_done (priv->completion);
+ }
+out:
+ backend_unlock (backend);
+ pk_backend_finished (backend);
+ return TRUE;
+}
+
+/**
* backend_get_update_detail:
*/
static void
backend_get_update_detail (PkBackend *backend, gchar **package_ids)
{
- gchar *package_ids_temp;
- package_ids_temp = pk_package_ids_to_string (package_ids);
- pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-update-detail", package_ids_temp, NULL);
- g_free (package_ids_temp);
+ /* it seems some people are not ready for the awesomeness */
+ if (TRUE || !priv->use_zif) {
+ gchar *package_ids_temp;
+ package_ids_temp = pk_package_ids_to_string (package_ids);
+ pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-update-detail", package_ids_temp, NULL);
+ g_free (package_ids_temp);
+ return;
+ }
+ pk_backend_thread_create (backend, backend_get_update_detail_thread);
}
/**
commit d2d66dcc4ceab765908c8aec7145319ca5797b7f
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 14:16:39 2010 +0100
yum: use zif to get the update lists
diff --git a/backends/yum/Makefile.am b/backends/yum/Makefile.am
index 9f46ca7..9565231 100644
--- a/backends/yum/Makefile.am
+++ b/backends/yum/Makefile.am
@@ -64,6 +64,8 @@ libpk_backend_yum_la_SOURCES += \
libzif/zif-md-metalink.h \
libzif/zif-md-mirrorlist.c \
libzif/zif-md-mirrorlist.h \
+ libzif/zif-md-updateinfo.c \
+ libzif/zif-md-updateinfo.h \
libzif/zif-md-comps.c \
libzif/zif-md-comps.h \
libzif/zif-store-array.c \
diff --git a/backends/yum/libzif/zif-store-remote.c b/backends/yum/libzif/zif-store-remote.c
index 483c776..4ebc3f2 100644
--- a/backends/yum/libzif/zif-store-remote.c
+++ b/backends/yum/libzif/zif-store-remote.c
@@ -1486,6 +1486,7 @@ zif_store_remote_resolve (ZifStore *store, const gchar *search, GCancellable *ca
GPtrArray *array = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
+ ZifMd *primary;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
g_return_val_if_fail (remote->priv->id != NULL, NULL);
@@ -1520,7 +1521,8 @@ zif_store_remote_resolve (ZifStore *store, const gchar *search, GCancellable *ca
}
completion_local = zif_completion_get_child (completion);
- array = zif_md_resolve (remote->priv->md_primary_db, search, cancellable, completion_local, error);
+ primary = zif_store_remote_get_primary (remote);
+ array = zif_md_resolve (primary, search, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1844,6 +1846,7 @@ zif_store_remote_search_group (ZifStore *store, const gchar *search, GCancellabl
GPtrArray *array = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
+ ZifMd *primary;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
g_return_val_if_fail (remote->priv->id != NULL, NULL);
@@ -1878,7 +1881,8 @@ zif_store_remote_search_group (ZifStore *store, const gchar *search, GCancellabl
}
completion_local = zif_completion_get_child (completion);
- array = zif_md_search_group (remote->priv->md_primary_db, search, cancellable, completion_local, error);
+ primary = zif_store_remote_get_primary (remote);
+ array = zif_md_search_group (primary, search, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1898,6 +1902,7 @@ zif_store_remote_find_package (ZifStore *store, const gchar *package_id, GCancel
GError *error_local = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
+ ZifMd *primary;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
g_return_val_if_fail (remote->priv->id != NULL, NULL);
@@ -1933,7 +1938,8 @@ zif_store_remote_find_package (ZifStore *store, const gchar *package_id, GCancel
/* search with predicate, TODO: search version (epoch+release) */
completion_local = zif_completion_get_child (completion);
- array = zif_md_find_package (remote->priv->md_primary_db, package_id, cancellable, completion_local, &error_local);
+ primary = zif_store_remote_get_primary (remote);
+ array = zif_md_find_package (primary, package_id, cancellable, completion_local, &error_local);
if (array == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to search: %s", error_local->message);
@@ -1976,6 +1982,7 @@ zif_store_remote_get_packages (ZifStore *store, GCancellable *cancellable, ZifCo
GPtrArray *array = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
+ ZifMd *primary;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
g_return_val_if_fail (remote->priv->id != NULL, NULL);
@@ -2009,8 +2016,9 @@ zif_store_remote_get_packages (ZifStore *store, GCancellable *cancellable, ZifCo
zif_completion_done (completion);
}
+ primary = zif_store_remote_get_primary (remote);
completion_local = zif_completion_get_child (completion);
- array = zif_md_get_packages (remote->priv->md_primary_db, cancellable, completion_local, error);
+ array = zif_md_get_packages (primary, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -2169,6 +2177,7 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
ZifCompletion *completion_local;
gchar **split;
gchar **split_update;
+ ZifMd *primary;
/* not locked */
ret = zif_lock_is_locked (remote->priv->lock, NULL);
@@ -2202,6 +2211,9 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
/* create array for packages to update */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ /* get primary */
+ primary = zif_store_remote_get_primary (remote);
+
/* find each one in a remote repo */
egg_debug ("searching with %i packages", packages->len);
for (i=0; i<packages->len; i++) {
@@ -2211,11 +2223,11 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
/* find package name in repo */
completion_local = zif_completion_get_child (completion);
split = pk_package_id_split (package_id);
- updates = zif_md_resolve (remote->priv->md_primary_db, split[PK_PACKAGE_ID_NAME],
- cancellable, completion_local, NULL);
+ updates = zif_md_resolve (primary, split[PK_PACKAGE_ID_NAME],
+ cancellable, completion_local, NULL);
g_strfreev (split);
if (updates == NULL) {
- egg_debug ("not found %s", split[PK_PACKAGE_ID_NAME]);
+ egg_debug ("not found %s", package_id);
continue;
}
@@ -2232,7 +2244,10 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
package_id_update = zif_package_get_id (update);
split = pk_package_id_split (package_id);
split_update = pk_package_id_split (package_id_update);
- egg_debug ("*** update %s from %s to %s", split[PK_PACKAGE_ID_NAME], split[PK_PACKAGE_ID_VERSION], split_update[PK_PACKAGE_ID_VERSION]);
+ egg_debug ("*** update %s from %s to %s",
+ split[PK_PACKAGE_ID_NAME],
+ split[PK_PACKAGE_ID_VERSION],
+ split_update[PK_PACKAGE_ID_VERSION]);
g_strfreev (split);
g_strfreev (split_update);
g_ptr_array_add (array, g_object_ref (update));
@@ -2259,6 +2274,7 @@ zif_store_remote_what_provides (ZifStore *store, const gchar *search,
GPtrArray *array = NULL;
ZifCompletion *completion_local;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
+ ZifMd *primary;
/* not locked */
ret = zif_lock_is_locked (remote->priv->lock, NULL);
@@ -2291,8 +2307,9 @@ zif_store_remote_what_provides (ZifStore *store, const gchar *search,
/* get details */
completion_local = zif_completion_get_child (completion);
- array = zif_md_what_provides (remote->priv->md_primary_db, search,
- cancellable, completion_local, error);
+ primary = zif_store_remote_get_primary (remote);
+ array = zif_md_what_provides (primary, search,
+ cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -2316,6 +2333,7 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
const gchar *pkgid;
guint i, j;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
+ ZifMd *primary;
/* not locked */
ret = zif_lock_is_locked (remote->priv->lock, NULL);
@@ -2359,6 +2377,9 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
/* this section done */
zif_completion_done (completion);
+ /* get primary */
+ primary = zif_store_remote_get_primary (remote);
+
/* resolve the pkgId to a set of packages */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (i=0; i<pkgids->len; i++) {
@@ -2366,7 +2387,7 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
/* get the results (should just be one) */
completion_local = zif_completion_get_child (completion);
- tmp = zif_md_search_pkgid (remote->priv->md_primary_db, pkgid, cancellable, completion_local, &error_local);
+ tmp = zif_md_search_pkgid (primary, pkgid, cancellable, completion_local, &error_local);
if (tmp == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED_TO_FIND,
"failed to resolve pkgId to package: %s", error_local->message);
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index bcbd6f3..58b6bd9 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -372,6 +372,7 @@ backend_emit_package_array (PkBackend *backend, GPtrArray *array)
guint i;
gboolean installed;
PkInfoEnum info;
+ const gchar *info_hint;
const gchar *package_id;
ZifString *summary;
ZifPackage *package;
@@ -383,10 +384,15 @@ backend_emit_package_array (PkBackend *backend, GPtrArray *array)
installed = zif_package_is_installed (package);
package_id = zif_package_get_package_id (package);
summary = zif_package_get_summary (package, NULL);
- info = installed ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
-// /* hack until we have update details */
-// if (strstr (package_id, "update") != NULL)
-// info = PK_INFO_ENUM_NORMAL;
+
+ /* if we set a hint, use that, otherwise just get the installed status correct */
+ info_hint = (const gchar *)g_object_get_data (G_OBJECT(package), "kind");
+ if (info_hint == NULL) {
+ info = installed ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
+ } else {
+ info = pk_info_enum_from_string (info_hint);
+ }
+
pk_backend_package (backend, info, package_id, zif_string_get_value (summary));
zif_string_unref (summary);
}
@@ -1431,13 +1437,21 @@ backend_get_updates_thread (PkBackend *backend)
PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
GPtrArray *store_array = NULL;
ZifCompletion *completion_local;
+ ZifCompletion *completion_loop;
GPtrArray *array = NULL;
GPtrArray *result = NULL;
GPtrArray *packages = NULL;
gboolean ret;
GError *error = NULL;
+ ZifUpdate *update;
+ ZifPackage *package;
+ PkInfoEnum info;
+ guint i;
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
+ /* reset */
+ backend_profile (NULL);
+
/* get lock */
ret = backend_get_lock (backend);
if (!ret) {
@@ -1445,12 +1459,15 @@ backend_get_updates_thread (PkBackend *backend)
goto out;
}
+ /* profile */
+ backend_profile ("get lock");
+
/* set the network state */
backend_setup_network (backend);
/* setup completion */
zif_completion_reset (priv->completion);
- zif_completion_set_number_steps (priv->completion, 4);
+ zif_completion_set_number_steps (priv->completion, 5);
/* get a store_array of remote stores */
store_array = zif_store_array_new ();
@@ -1465,6 +1482,9 @@ backend_get_updates_thread (PkBackend *backend)
/* this section done */
zif_completion_done (priv->completion);
+ /* profile */
+ backend_profile ("get remote stores");
+
/* get all the installed packages */
completion_local = zif_completion_get_child (priv->completion);
packages = zif_store_get_packages (ZIF_STORE (priv->store_local), NULL, completion_local, &error);
@@ -1478,12 +1498,18 @@ backend_get_updates_thread (PkBackend *backend)
/* this section done */
zif_completion_done (priv->completion);
+ /* profile */
+ backend_profile ("get installed packages");
+
/* remove any packages that are not newest (think kernel) */
zif_package_array_filter_newest (packages);
/* this section done */
zif_completion_done (priv->completion);
+ /* profile */
+ backend_profile ("filter installed newest");
+
/* get updates */
completion_local = zif_completion_get_child (priv->completion);
array = zif_store_array_get_updates (store_array, packages, (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
@@ -1497,6 +1523,40 @@ backend_get_updates_thread (PkBackend *backend)
/* this section done */
zif_completion_done (priv->completion);
+ /* profile */
+ backend_profile ("get updates of packages");
+
+ /* setup steps on updatinfo completion */
+ completion_local = zif_completion_get_child (priv->completion);
+ zif_completion_set_number_steps (completion_local, array->len);
+
+ /* get update info */
+ for (i=0; i<array->len; i++) {
+ package = g_ptr_array_index (array, i);
+ completion_loop = zif_completion_get_child (completion_local);
+ update = zif_package_get_update_detail (package, priv->cancellable, completion_loop, &error);
+ if (update == NULL) {
+ egg_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
+ g_clear_error (&error);
+ info = PK_INFO_ENUM_NORMAL;
+ } else {
+ info = zif_update_get_kind (update);
+ g_object_unref (update);
+ }
+
+ /* set new severity */
+ g_object_set_data (G_OBJECT(package), "kind", (gpointer)pk_info_enum_to_string (info));
+
+ /* this section done */
+ zif_completion_done (completion_local);
+ }
+
+ /* this section done */
+ zif_completion_done (priv->completion);
+
+ /* profile */
+ backend_profile ("get updateinfo");
+
/* filter */
result = backend_filter_package_array (array, filters);
@@ -1506,6 +1566,9 @@ backend_get_updates_thread (PkBackend *backend)
/* emit */
backend_emit_package_array (backend, result);
+ /* profile */
+ backend_profile ("filter and emit");
+
out:
backend_unlock (backend);
pk_backend_finished (backend);
@@ -1528,7 +1591,7 @@ static void
backend_get_updates (PkBackend *backend, PkBitfield filters)
{
/* it seems some people are not ready for the awesomeness */
- if (TRUE || !priv->use_zif) {
+ if (!priv->use_zif) {
gchar *filters_text;
filters_text = pk_filter_bitfield_to_string (filters);
pk_backend_spawn_helper (priv->spawn, "yumBackend.py", "get-updates", filters_text, NULL);
commit 48ecaebae6a5368e05d1000852ff32b9c928b1c0
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 13:28:28 2010 +0100
Fix build when not using PolicyKit
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 022c82e..912e6aa 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -923,7 +923,7 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
egg_warning ("*** THERE IS NO SECURITY MODEL BEING USED!!! ***");
/* try to set the new proxy and save to database */
- ret = pk_engine_set_proxy_internal (engine);
+ ret = pk_engine_set_proxy_internal (engine, sender);
if (!ret) {
error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "setting the proxy failed");
dbus_g_method_return_error (context, error);
commit a6bb5de5a32d5140d8097d66dd6a8b4856547e2f
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 13:25:03 2010 +0100
trivial: update to the latest snapshot of libzif to support legacy primary metadata
diff --git a/backends/yum/Makefile.am b/backends/yum/Makefile.am
index a645404..9f46ca7 100644
--- a/backends/yum/Makefile.am
+++ b/backends/yum/Makefile.am
@@ -52,18 +52,20 @@ libpk_backend_yum_la_SOURCES += \
libzif/zif-store-local.h \
libzif/zif-store-remote.c \
libzif/zif-store-remote.h \
- libzif/zif-repo-md.c \
- libzif/zif-repo-md.h \
- libzif/zif-repo-md-filelists.c \
- libzif/zif-repo-md-filelists.h \
- libzif/zif-repo-md-primary.c \
- libzif/zif-repo-md-primary.h \
- libzif/zif-repo-md-metalink.c \
- libzif/zif-repo-md-metalink.h \
- libzif/zif-repo-md-mirrorlist.c \
- libzif/zif-repo-md-mirrorlist.h \
- libzif/zif-repo-md-comps.c \
- libzif/zif-repo-md-comps.h \
+ libzif/zif-md.c \
+ libzif/zif-md.h \
+ libzif/zif-md-filelists.c \
+ libzif/zif-md-filelists.h \
+ libzif/zif-md-primary-sql.c \
+ libzif/zif-md-primary-sql.h \
+ libzif/zif-md-primary-xml.c \
+ libzif/zif-md-primary-xml.h \
+ libzif/zif-md-metalink.c \
+ libzif/zif-md-metalink.h \
+ libzif/zif-md-mirrorlist.c \
+ libzif/zif-md-mirrorlist.h \
+ libzif/zif-md-comps.c \
+ libzif/zif-md-comps.h \
libzif/zif-store-array.c \
libzif/zif-store-array.h \
libzif/zif-repos.c \
@@ -76,6 +78,10 @@ libpk_backend_yum_la_SOURCES += \
libzif/zif-config.h \
libzif/zif-monitor.c \
libzif/zif-monitor.h \
+ libzif/zif-update.c \
+ libzif/zif-update.h \
+ libzif/zif-update-info.c \
+ libzif/zif-update-info.h \
libzif/zif-download.c \
libzif/zif-download.h
diff --git a/backends/yum/libzif/zif-package.c b/backends/yum/libzif/zif-package.c
index d0e9b3f..4d6890a 100644
--- a/backends/yum/libzif/zif-package.c
+++ b/backends/yum/libzif/zif-package.c
@@ -123,6 +123,10 @@ zif_package_compare (ZifPackage *a, ZifPackage *b)
/* do a version compare */
val = zif_compare_evr (splita[PK_PACKAGE_ID_VERSION], splitb[PK_PACKAGE_ID_VERSION]);
+
+ /* if the packages are equal, prefer the same architecture */
+ if (val == 0)
+ val = g_strcmp0 (splitb[PK_PACKAGE_ID_ARCH], splita[PK_PACKAGE_ID_ARCH]);
out:
g_strfreev (splita);
g_strfreev (splitb);
@@ -173,6 +177,73 @@ out:
}
/**
+ * zif_package_array_filter_newest:
+ * @packages: array of %ZifPackage's
+ *
+ * Filters the list so that only the newest version of a package remains.
+ *
+ * Return value: %TRUE if the array was modified
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_package_array_filter_newest (GPtrArray *packages)
+{
+ guint i;
+ GHashTable *hash;
+ ZifPackage *package;
+ ZifPackage *package_tmp;
+ const gchar *name;
+ gboolean ret = FALSE;
+
+ /* use a hash so it's O(n) not O(n^2) */
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+ for (i=0; i<packages->len; i++) {
+ package = ZIF_PACKAGE (g_ptr_array_index (packages, i));
+ name = zif_package_get_name (package);
+ package_tmp = g_hash_table_lookup (hash, name);
+
+ /* does not already exist */
+ if (package_tmp == NULL) {
+ g_hash_table_insert (hash, g_strdup (name), g_object_ref (package));
+ continue;
+ }
+
+ /* the new package is older */
+ if (zif_package_compare (package, package_tmp) < 0) {
+ egg_debug ("%s is older than %s, so ignoring it",
+ zif_package_get_id (package), zif_package_get_id (package_tmp));
+ g_ptr_array_remove_index_fast (packages, i);
+ ret = TRUE;
+ continue;
+ }
+
+ ret = TRUE;
+ egg_debug ("removing %s", zif_package_get_id (package_tmp));
+ egg_debug ("adding %s", zif_package_get_id (package));
+
+ /* remove the old one */
+ g_hash_table_remove (hash, zif_package_get_name (package_tmp));
+ g_hash_table_insert (hash, g_strdup (name), g_object_ref (package));
+ g_ptr_array_remove_fast (packages, package_tmp);
+ }
+ g_hash_table_unref (hash);
+ return ret;
+}
+
+/**
+ * zif_package_get_store_for_package:
+ **/
+static ZifStoreRemote *
+zif_package_get_store_for_package (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ ZifStoreRemote *store_remote;
+ store_remote = zif_repos_get_store (package->priv->repos, package->priv->package_id_split[PK_PACKAGE_ID_DATA],
+ cancellable, completion, error);
+ return store_remote;
+}
+
+/**
* zif_package_download:
* @package: the #ZifPackage object
* @directory: the local directory to save to
@@ -190,7 +261,7 @@ gboolean
zif_package_download (ZifPackage *package, const gchar *directory, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret = FALSE;
- ZifStoreRemote *repo = NULL;
+ ZifStoreRemote *store_remote = NULL;
GError *error_local = NULL;
ZifCompletion *completion_local = NULL;
@@ -210,10 +281,10 @@ zif_package_download (ZifPackage *package, const gchar *directory, GCancellable
/* find correct repo */
completion_local = zif_completion_get_child (completion);
- repo = zif_repos_get_store (package->priv->repos, package->priv->package_id_split[PK_PACKAGE_ID_DATA], cancellable, completion_local, &error_local);
- if (repo == NULL) {
+ store_remote = zif_package_get_store_for_package (package, cancellable, completion_local, &error_local);
+ if (store_remote == NULL) {
g_set_error (error, ZIF_PACKAGE_ERROR, ZIF_PACKAGE_ERROR_FAILED,
- "cannot find remote repo: %s", error_local->message);
+ "cannot find remote store: %s", error_local->message);
g_error_free (error_local);
goto out;
}
@@ -224,11 +295,11 @@ zif_package_download (ZifPackage *package, const gchar *directory, GCancellable
/* create a chain of completions */
completion_local = zif_completion_get_child (completion);
- /* download from the repo */
- ret = zif_store_remote_download (repo, zif_string_get_value (package->priv->location_href), directory, cancellable, completion_local, &error_local);
+ /* download from the store */
+ ret = zif_store_remote_download (store_remote, zif_string_get_value (package->priv->location_href), directory, cancellable, completion_local, &error_local);
if (!ret) {
g_set_error (error, ZIF_PACKAGE_ERROR, ZIF_PACKAGE_ERROR_FAILED,
- "cannot download from repo: %s", error_local->message);
+ "cannot download from store: %s", error_local->message);
g_error_free (error_local);
goto out;
}
@@ -236,12 +307,77 @@ zif_package_download (ZifPackage *package, const gchar *directory, GCancellable
/* this section done */
zif_completion_done (completion);
out:
- if (repo != NULL)
- g_object_unref (repo);
+ if (store_remote != NULL)
+ g_object_unref (store_remote);
return ret;
}
/**
+ * zif_package_get_update_detail:
+ * @package: the #ZifPackage object
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the update detail for a package.
+ *
+ * Return value: a %ZifUpdate, or %NULL for failure
+ *
+ * Since: 0.0.1
+ **/
+ZifUpdate *
+zif_package_get_update_detail (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ ZifUpdate *update = NULL;
+ ZifStoreRemote *store_remote = NULL;
+ GError *error_local = NULL;
+ ZifCompletion *completion_local = NULL;
+
+ g_return_val_if_fail (ZIF_IS_PACKAGE (package), NULL);
+ g_return_val_if_fail (package->priv->package_id_split != NULL, NULL);
+
+ /* check we are not installed */
+ if (package->priv->installed) {
+ g_set_error_literal (error, ZIF_PACKAGE_ERROR, ZIF_PACKAGE_ERROR_FAILED,
+ "cannot get details for installed packages");
+ goto out;
+ }
+
+ /* two steps */
+ zif_completion_set_number_steps (completion, 2);
+
+ /* find correct repo */
+ completion_local = zif_completion_get_child (completion);
+ store_remote = zif_package_get_store_for_package (package, cancellable, completion_local, &error_local);
+ if (store_remote == NULL) {
+ g_set_error (error, ZIF_PACKAGE_ERROR, ZIF_PACKAGE_ERROR_FAILED,
+ "cannot find remote store: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* download from the store */
+ completion_local = zif_completion_get_child (completion);
+ update = zif_store_remote_get_update_detail (store_remote, package->priv->package_id, cancellable, completion_local, &error_local);
+ if (update == NULL) {
+ g_set_error (error, ZIF_PACKAGE_ERROR, ZIF_PACKAGE_ERROR_FAILED,
+ "cannot get update detail from store: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ if (store_remote != NULL)
+ g_object_unref (store_remote);
+ return update;
+}
+
+/**
* zif_package_print:
* @package: the #ZifPackage object
*
diff --git a/backends/yum/libzif/zif-package.h b/backends/yum/libzif/zif-package.h
index 69a6319..c958365 100644
--- a/backends/yum/libzif/zif-package.h
+++ b/backends/yum/libzif/zif-package.h
@@ -47,6 +47,8 @@ typedef struct _ZifPackage ZifPackage;
typedef struct _ZifPackagePrivate ZifPackagePrivate;
typedef struct _ZifPackageClass ZifPackageClass;
+#include "zif-update.h"
+
typedef enum {
ZIF_PACKAGE_ENSURE_TYPE_FILES,
ZIF_PACKAGE_ENSURE_TYPE_SUMMARY,
@@ -147,6 +149,10 @@ gboolean zif_package_download (ZifPackage *package,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+ZifUpdate *zif_package_get_update_detail (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
const gchar *zif_package_get_package_id (ZifPackage *package);
void zif_package_print (ZifPackage *package);
gboolean zif_package_is_devel (ZifPackage *package);
@@ -158,6 +164,7 @@ gint zif_package_compare (ZifPackage *a,
ZifPackage *b);
ZifPackage *zif_package_array_get_newest (GPtrArray *array,
GError **error);
+gboolean zif_package_array_filter_newest (GPtrArray *packages);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-repo-md-comps.c b/backends/yum/libzif/zif-repo-md-comps.c
deleted file mode 100644
index 096176f..0000000
--- a/backends/yum/libzif/zif-repo-md-comps.c
+++ /dev/null
@@ -1,977 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-repo-md-comps
- * @short_description: Comps metadata functionality
- *
- * Provide access to the comps repo metadata.
- * This object is a subclass of #ZifRepoMd
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <glib.h>
-
-#include "zif-repo-md.h"
-#include "zif-repo-md-comps.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_REPO_MD_COMPS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPO_MD_COMPS, ZifRepoMdCompsPrivate))
-
-typedef enum {
- ZIF_REPO_MD_COMPS_SECTION_GROUP,
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY,
- ZIF_REPO_MD_COMPS_SECTION_UNKNOWN
-} ZifRepoMdCompsSection;
-
-typedef enum {
- ZIF_REPO_MD_COMPS_SECTION_GROUP_ID,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_NAME,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_DESCRIPTION,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_VISIBLE,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_PACKAGELIST,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_PACKAGE,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN
-} ZifRepoMdCompsSectionGroup;
-
-typedef enum {
- ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_DEFAULT,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_OPTIONAL,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_CONDITIONAL,
- ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_UNKNOWN
-} ZifRepoMdCompsSectionGroupType;
-
-typedef enum {
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY_ID,
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY_NAME,
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY_DESCRIPTION,
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY_GROUPLIST,
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY_GROUP,
- ZIF_REPO_MD_COMPS_SECTION_CATEGORY_UNKNOWN
-} ZifRepoMdCompsSectionCategory;
-
-typedef struct {
- gchar *id;
- gchar *name;
- gchar *description;
- gboolean visible;
- GPtrArray *packagelist; /* stored as gchar */
-} ZifRepoMdCompsGroupData;
-
-typedef struct {
- gchar *id;
- gchar *name;
- gchar *description;
- GPtrArray *grouplist; /* stored as gchar */
-} ZifRepoMdCompsCategoryData;
-
-/**
- * ZifRepoMdCompsPrivate:
- *
- * Private #ZifRepoMdComps data
- **/
-struct _ZifRepoMdCompsPrivate
-{
- gboolean loaded;
- GPtrArray *array_groups; /* stored as ZifRepoMdCompsGroupData */
- GPtrArray *array_categories; /* stored as ZifRepoMdCompsCategoryData */
- /* for parser */
- ZifRepoMdCompsSection section;
- ZifRepoMdCompsSectionGroup section_group;
- ZifRepoMdCompsSectionGroupType section_group_type;
- ZifRepoMdCompsSectionCategory section_category;
- ZifRepoMdCompsGroupData *group_data_temp;
- ZifRepoMdCompsCategoryData *category_data_temp;
-};
-
-G_DEFINE_TYPE (ZifRepoMdComps, zif_repo_md_comps, ZIF_TYPE_REPO_MD)
-
-/**
- * zif_repo_md_comps_group_data_new:
- **/
-static ZifRepoMdCompsGroupData *
-zif_repo_md_comps_group_data_new (void)
-{
- ZifRepoMdCompsGroupData *data;
- data = g_new0 (ZifRepoMdCompsGroupData, 1);
- data->packagelist = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- return data;
-}
-
-/**
- * zif_repo_md_comps_category_data_new:
- **/
-static ZifRepoMdCompsCategoryData *
-zif_repo_md_comps_category_data_new (void)
-{
- ZifRepoMdCompsCategoryData *data;
- data = g_new0 (ZifRepoMdCompsCategoryData, 1);
- data->grouplist = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- return data;
-}
-
-/**
- * zif_repo_md_comps_group_data_free:
- **/
-static void
-zif_repo_md_comps_group_data_free (ZifRepoMdCompsGroupData *data)
-{
- g_free (data->id);
- g_free (data->name);
- g_free (data->description);
- g_ptr_array_unref (data->packagelist);
- g_free (data);
-}
-
-/**
- * zif_repo_md_comps_category_data_free:
- **/
-static void
-zif_repo_md_comps_category_data_free (ZifRepoMdCompsCategoryData *data)
-{
- g_free (data->id);
- g_free (data->name);
- g_free (data->description);
- g_ptr_array_unref (data->grouplist);
- g_free (data);
-}
-
-#if 0
-/**
- * zif_repo_md_comps_protocol_type_from_text:
- **/
-static ZifRepoMdCompsProtocolType
-zif_repo_md_comps_protocol_type_from_text (const gchar *type_text)
-{
- if (g_strcmp0 (type_text, "ftp") == 0)
- return ZIF_REPO_MD_COMPS_PROTOCOL_TYPE_FTP;
- if (g_strcmp0 (type_text, "http") == 0)
- return ZIF_REPO_MD_COMPS_PROTOCOL_TYPE_HTTP;
- if (g_strcmp0 (type_text, "rsync") == 0)
- return ZIF_REPO_MD_COMPS_PROTOCOL_TYPE_RSYNC;
- return ZIF_REPO_MD_COMPS_PROTOCOL_TYPE_UNKNOWN;
-}
-#endif
-
-/**
- * zif_repo_md_comps_parser_start_element:
- **/
-static void
-zif_repo_md_comps_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
- const gchar **attribute_names, const gchar **attribute_values,
- gpointer user_data, GError **error)
-{
- guint i;
- ZifRepoMdComps *comps = user_data;
-
- g_return_if_fail (ZIF_IS_REPO_MD_COMPS (comps));
-
- /* group element */
- if (comps->priv->section == ZIF_REPO_MD_COMPS_SECTION_UNKNOWN) {
-
- /* start of group */
- if (g_strcmp0 (element_name, "group") == 0) {
- comps->priv->section = ZIF_REPO_MD_COMPS_SECTION_GROUP;
- comps->priv->group_data_temp = zif_repo_md_comps_group_data_new ();
- goto out;
- }
-
- /* start of category */
- if (g_strcmp0 (element_name, "category") == 0) {
- comps->priv->section = ZIF_REPO_MD_COMPS_SECTION_CATEGORY;
- comps->priv->category_data_temp = zif_repo_md_comps_category_data_new ();
- goto out;
- }
-
- goto out;
- }
-
- /* group element */
- if (comps->priv->section == ZIF_REPO_MD_COMPS_SECTION_GROUP) {
- /* id */
- if (g_strcmp0 (element_name, "id") == 0) {
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_ID;
- goto out;
- }
- if (g_strcmp0 (element_name, "name") == 0) {
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_NAME;
- goto out;
- }
- if (g_strcmp0 (element_name, "description") == 0) {
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_DESCRIPTION;
- goto out;
- }
- if (g_strcmp0 (element_name, "uservisible") == 0) {
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_VISIBLE;
- goto out;
- }
- if (g_strcmp0 (element_name, "packagelist") == 0) {
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_PACKAGELIST;
- goto out;
- }
- if (g_strcmp0 (element_name, "packagereq") == 0) {
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_PACKAGE;
-
- /* find the package type as a bonus */
- comps->priv->section_group_type = ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_UNKNOWN;
- for (i=0; attribute_names[i] != NULL; i++) {
- if (g_strcmp0 (element_name, "type") == 0) {
- if (g_strcmp0 (attribute_values[i], "default"))
- comps->priv->section_group_type = ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_DEFAULT;
- break;
- }
- }
- goto out;
- }
- }
-
- /* category element */
- if (comps->priv->section == ZIF_REPO_MD_COMPS_SECTION_CATEGORY) {
- /* id */
- if (g_strcmp0 (element_name, "id") == 0) {
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_ID;
- goto out;
- }
- if (g_strcmp0 (element_name, "name") == 0) {
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_NAME;
- goto out;
- }
- if (g_strcmp0 (element_name, "description") == 0) {
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_DESCRIPTION;
- goto out;
- }
- if (g_strcmp0 (element_name, "grouplist") == 0) {
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_GROUPLIST;
- goto out;
- }
- if (g_strcmp0 (element_name, "groupid") == 0) {
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_GROUP;
- goto out;
- }
- }
-out:
- return;
-}
-
-/**
- * zif_repo_md_comps_parser_end_element:
- **/
-static void
-zif_repo_md_comps_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
- gpointer user_data, GError **error)
-{
- ZifRepoMdComps *comps = user_data;
-
- /* end of group */
- if (g_strcmp0 (element_name, "group") == 0) {
- comps->priv->section = ZIF_REPO_MD_COMPS_SECTION_UNKNOWN;
-
- /* add to array */
- g_ptr_array_add (comps->priv->array_groups, comps->priv->group_data_temp);
-
- if (FALSE)
- egg_debug ("added GROUP '%s' name:%s, desc:%s, visible:%i, list=%p",
- comps->priv->group_data_temp->id,
- comps->priv->group_data_temp->name,
- comps->priv->group_data_temp->description,
- comps->priv->group_data_temp->visible,
- comps->priv->group_data_temp->packagelist);
-
- comps->priv->group_data_temp = NULL;
- goto out;
- }
-
- /* start of group */
- if (g_strcmp0 (element_name, "category") == 0) {
- comps->priv->section = ZIF_REPO_MD_COMPS_SECTION_UNKNOWN;
-
- /* add to array */
- g_ptr_array_add (comps->priv->array_categories, comps->priv->category_data_temp);
-
- if (FALSE)
- egg_debug ("added CATEGORY '%s' name:%s, desc:%s, list=%p",
- comps->priv->category_data_temp->id,
- comps->priv->category_data_temp->name,
- comps->priv->category_data_temp->description,
- comps->priv->category_data_temp->grouplist);
-
- comps->priv->category_data_temp = NULL;
- goto out;
- }
-out:
- return;
-}
-
-/**
- * zif_repo_md_comps_parser_text:
- **/
-static void
-zif_repo_md_comps_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
- gpointer user_data, GError **error)
-
-{
- ZifRepoMdComps *comps = user_data;
-
- /* skip whitespace */
- if (text_len < 1 || text[0] == ' ' || text[0] == '\t' || text[0] == '\n')
- goto out;
-
- /* group section */
- if (comps->priv->section == ZIF_REPO_MD_COMPS_SECTION_GROUP) {
- if (comps->priv->section_group == ZIF_REPO_MD_COMPS_SECTION_GROUP_ID) {
- comps->priv->group_data_temp->id = g_strdup (text);
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_group == ZIF_REPO_MD_COMPS_SECTION_GROUP_NAME) {
- /* ignore translated versions for now */
- if (comps->priv->group_data_temp->name != NULL)
- goto out;
- comps->priv->group_data_temp->name = g_strdup (text);
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_group == ZIF_REPO_MD_COMPS_SECTION_GROUP_DESCRIPTION) {
- /* ignore translated versions for now */
- if (comps->priv->group_data_temp->description != NULL)
- goto out;
- comps->priv->group_data_temp->description = g_strdup (text);
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_group == ZIF_REPO_MD_COMPS_SECTION_GROUP_VISIBLE) {
- /* TODO: parse true and false */
- comps->priv->group_data_temp->visible = atoi (text);
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_group == ZIF_REPO_MD_COMPS_SECTION_GROUP_PACKAGE) {
- g_ptr_array_add (comps->priv->group_data_temp->packagelist, g_strdup (text));
- comps->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN;
- goto out;
- }
- goto out;
- }
-
- /* category section */
- if (comps->priv->section == ZIF_REPO_MD_COMPS_SECTION_CATEGORY) {
- if (comps->priv->section_category == ZIF_REPO_MD_COMPS_SECTION_CATEGORY_ID) {
- comps->priv->category_data_temp->id = g_strdup (text);
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_category == ZIF_REPO_MD_COMPS_SECTION_CATEGORY_NAME) {
- /* ignore translated versions for now */
- if (comps->priv->category_data_temp->name != NULL)
- goto out;
- comps->priv->category_data_temp->name = g_strdup (text);
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_category == ZIF_REPO_MD_COMPS_SECTION_CATEGORY_DESCRIPTION) {
- /* ignore translated versions for now */
- if (comps->priv->category_data_temp->description != NULL)
- goto out;
- comps->priv->category_data_temp->description = g_strdup (text);
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
- goto out;
- }
- if (comps->priv->section_category == ZIF_REPO_MD_COMPS_SECTION_CATEGORY_GROUP) {
- g_ptr_array_add (comps->priv->category_data_temp->grouplist, g_strdup (text));
- comps->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
- goto out;
- }
- goto out;
- }
-out:
- return;
-}
-
-/**
- * zif_repo_md_comps_unload:
- **/
-static gboolean
-zif_repo_md_comps_unload (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = FALSE;
- return ret;
-}
-
-/**
- * zif_repo_md_comps_load:
- **/
-static gboolean
-zif_repo_md_comps_load (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = TRUE;
- gchar *contents = NULL;
- const gchar *filename;
- gsize size;
- GMarkupParseContext *context = NULL;
- const GMarkupParser gpk_repo_md_comps_markup_parser = {
- zif_repo_md_comps_parser_start_element,
- zif_repo_md_comps_parser_end_element,
- zif_repo_md_comps_parser_text,
- NULL, /* passthrough */
- NULL /* error */
- };
- ZifRepoMdComps *comps = ZIF_REPO_MD_COMPS (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_COMPS (md), FALSE);
-
- /* already loaded */
- if (comps->priv->loaded)
- goto out;
-
- /* get filename */
- filename = zif_repo_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get filename for comps");
- goto out;
- }
-
- /* open database */
- egg_debug ("filename = %s", filename);
-
- /* get repo contents */
- ret = g_file_get_contents (filename, &contents, &size, error);
- if (!ret)
- goto out;
-
- /* create parser */
- context = g_markup_parse_context_new (&gpk_repo_md_comps_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, comps, NULL);
-
- /* parse data */
- ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
- if (!ret)
- goto out;
-
- comps->priv->loaded = TRUE;
-out:
- if (context != NULL)
- g_markup_parse_context_free (context);
- g_free (contents);
- return ret;
-}
-
-/**
- * zif_repo_md_comps_category_set_icon:
- *
- * Check the icon exists, otherwise fallback to the parent ID, and then
- * something sane.
- **/
-static void
-zif_repo_md_comps_category_set_icon (PkCategory *category)
-{
- const gchar *icon;
- GString *filename = g_string_new ("");
-
- /* try the proper group icon */
- icon = pk_category_get_id (category);
- g_string_printf (filename, "/usr/share/pixmaps/comps/%s.png", icon);
- if (g_file_test (filename->str, G_FILE_TEST_EXISTS))
- goto out;
-
- /* fall back to parent icon */
- icon = pk_category_get_parent_id (category);
- g_string_printf (filename, "/usr/share/pixmaps/comps/%s.png", icon);
- if (g_file_test (filename->str, G_FILE_TEST_EXISTS))
- goto out;
-
- /* fall back to the missing icon */
- icon = "image-missing";
-out:
- pk_category_set_icon (category, icon);
- g_string_free (filename, TRUE);
-}
-
-/**
- * zif_repo_md_comps_get_categories:
- * @md: the #ZifRepoMdComps object
- * @cancellable: the %GCancellable, or %NULL
- * @completion: the %ZifCompletion object
- * @error: a #GError which is used on failure, or %NULL
- *
- * Gets the available list of categories.
- *
- * Return value: %PkCategory array of categories, with parent_id set to %NULL
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_comps_get_categories (ZifRepoMdComps *md, GCancellable *cancellable,
- ZifCompletion *completion, GError **error)
-{
- GPtrArray *array = NULL;
- guint i;
- guint len;
- gboolean ret;
- GError *error_local = NULL;
- const ZifRepoMdCompsCategoryData *data;
- PkCategory *category;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_COMPS (md), NULL);
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to get load comps: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* get categories */
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
- len = md->priv->array_categories->len;
- for (i=0; i<len; i++) {
- data = g_ptr_array_index (md->priv->array_categories, i);
- category = pk_category_new ();
- pk_category_set_id (category, data->id);
- pk_category_set_name (category, data->name);
- pk_category_set_summary (category, data->description);
- zif_repo_md_comps_category_set_icon (category);
- g_ptr_array_add (array, category);
- }
-out:
- return array;
-}
-
-/**
- * zif_repo_md_comps_get_category_for_group:
- **/
-static PkCategory *
-zif_repo_md_comps_get_category_for_group (ZifRepoMdComps *md, const gchar *group_id)
-{
- guint i;
- guint len;
- PkCategory *category = NULL;
- ZifRepoMdCompsGroupData *data;
-
- /* find group matching group_id */
- len = md->priv->array_groups->len;
- for (i=0; i<len; i++) {
- data = g_ptr_array_index (md->priv->array_groups, i);
- if (g_strcmp0 (group_id, data->id) == 0) {
- category = pk_category_new ();
- pk_category_set_id (category, data->id);
- pk_category_set_name (category, data->name);
- pk_category_set_summary (category, data->description);
- break;
- }
- }
- return category;
-}
-
-/**
- * zif_repo_md_comps_get_groups_for_category:
- * @md: the #ZifRepoMdComps object
- * @category_id: the category to search for
- * @cancellable: the %GCancellable, or %NULL
- * @completion: the %ZifCompletion object
- * @error: a #GError which is used on failure, or %NULL
- *
- * Gets the list of groups for a specific category.
- *
- * Return value: %PkCategory array of groups
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_comps_get_groups_for_category (ZifRepoMdComps *md, const gchar *category_id,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- GPtrArray *array = NULL;
- guint i;
- guint j;
- guint len;
- gboolean ret;
- GError *error_local = NULL;
- const ZifRepoMdCompsCategoryData *data;
- const gchar *id;
- PkCategory *category;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_COMPS (md), NULL);
- g_return_val_if_fail (category_id != NULL, NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to get load comps: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* get categories */
- len = md->priv->array_categories->len;
- for (i=0; i<len; i++) {
- data = g_ptr_array_index (md->priv->array_categories, i);
-
- /* category matches */
- if (g_strcmp0 (category_id, data->id) == 0) {
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
- for (j=0; j<data->grouplist->len; j++) {
- id = g_ptr_array_index (data->grouplist, j);
- /* find group matching group_id */
- category = zif_repo_md_comps_get_category_for_group (md, id);
- if (category == NULL)
- continue;
-
- /* add */
- pk_category_set_parent_id (category, category_id);
- zif_repo_md_comps_category_set_icon (category);
- g_ptr_array_add (array, category);
- }
- break;
- }
- }
-
- /* nothing found */
- if (array == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "could not find category: %s", category_id);
- }
-out:
- return array;
-}
-
-/**
- * zif_repo_md_comps_get_packages_for_group:
- * @md: the #ZifRepoMdComps object
- * @group_id: the group to search for
- * @cancellable: the %GCancellable, or %NULL
- * @completion: the %ZifCompletion object
- * @error: a #GError which is used on failure, or %NULL
- *
- * Gets the package names for a group.
- *
- * Return value: gchar pointer array of package names (not %ZifPackage's)
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_comps_get_packages_for_group (ZifRepoMdComps *md, const gchar *group_id,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- GPtrArray *array = NULL;
- guint i;
- guint j;
- guint len;
- gboolean ret;
- GError *error_local = NULL;
- const ZifRepoMdCompsGroupData *data;
- const gchar *packagename;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_COMPS (md), NULL);
- g_return_val_if_fail (group_id != NULL, NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to get load comps: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* get packages in this group */
- len = md->priv->array_groups->len;
- for (i=0; i<len; i++) {
- data = g_ptr_array_index (md->priv->array_groups, i);
-
- /* category matches */
- if (g_strcmp0 (group_id, data->id) == 0) {
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- for (j=0; j<data->packagelist->len; j++) {
- packagename = g_ptr_array_index (data->packagelist, j);
- g_ptr_array_add (array, g_strdup (packagename));
- }
- break;
- }
- }
-
- /* nothing found */
- if (array == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "could not find group: %s", group_id);
- }
-out:
- return array;
-}
-
-/**
- * zif_repo_md_comps_finalize:
- **/
-static void
-zif_repo_md_comps_finalize (GObject *object)
-{
- ZifRepoMdComps *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_REPO_MD_COMPS (object));
- md = ZIF_REPO_MD_COMPS (object);
-
- g_ptr_array_unref (md->priv->array_groups);
- g_ptr_array_unref (md->priv->array_categories);
-
- G_OBJECT_CLASS (zif_repo_md_comps_parent_class)->finalize (object);
-}
-
-/**
- * zif_repo_md_comps_class_init:
- **/
-static void
-zif_repo_md_comps_class_init (ZifRepoMdCompsClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ZifRepoMdClass *repo_md_class = ZIF_REPO_MD_CLASS (klass);
- object_class->finalize = zif_repo_md_comps_finalize;
-
- /* map */
- repo_md_class->load = zif_repo_md_comps_load;
- repo_md_class->unload = zif_repo_md_comps_unload;
- g_type_class_add_private (klass, sizeof (ZifRepoMdCompsPrivate));
-}
-
-/**
- * zif_repo_md_comps_init:
- **/
-static void
-zif_repo_md_comps_init (ZifRepoMdComps *md)
-{
- md->priv = ZIF_REPO_MD_COMPS_GET_PRIVATE (md);
- md->priv->loaded = FALSE;
- md->priv->section = ZIF_REPO_MD_COMPS_SECTION_UNKNOWN;
- md->priv->section_group = ZIF_REPO_MD_COMPS_SECTION_GROUP_UNKNOWN;
- md->priv->section_group_type = ZIF_REPO_MD_COMPS_SECTION_GROUP_TYPE_UNKNOWN;
- md->priv->section_category = ZIF_REPO_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
- md->priv->group_data_temp = NULL;
- md->priv->category_data_temp = NULL;
- md->priv->array_groups = g_ptr_array_new_with_free_func ((GDestroyNotify) zif_repo_md_comps_group_data_free);
- md->priv->array_categories = g_ptr_array_new_with_free_func ((GDestroyNotify) zif_repo_md_comps_category_data_free);
-}
-
-/**
- * zif_repo_md_comps_new:
- *
- * Return value: A new #ZifRepoMdComps class instance.
- *
- * Since: 0.0.1
- **/
-ZifRepoMdComps *
-zif_repo_md_comps_new (void)
-{
- ZifRepoMdComps *md;
- md = g_object_new (ZIF_TYPE_REPO_MD_COMPS, NULL);
- return ZIF_REPO_MD_COMPS (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_repo_md_comps_test (EggTest *test)
-{
- ZifRepoMdComps *md;
- gboolean ret;
- GError *error = NULL;
- GPtrArray *array;
- const gchar *id;
- GCancellable *cancellable;
- ZifCompletion *completion;
- PkCategory *category;
-
- if (!egg_test_start (test, "ZifRepoMdComps"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
-
- /************************************************************/
- egg_test_title (test, "get repo_md_comps md");
- md = zif_repo_md_comps_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_repo_md_set_id (ZIF_REPO_MD (md), "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set type");
- ret = zif_repo_md_set_mdtype (ZIF_REPO_MD (md), ZIF_REPO_MD_TYPE_COMPS_XML);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set filename");
- ret = zif_repo_md_set_filename (ZIF_REPO_MD (md), "../test/cache/comps-rawhide.xml");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum type");
- ret = zif_repo_md_set_checksum_type (ZIF_REPO_MD (md), G_CHECKSUM_SHA256);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum uncompressed");
- ret = zif_repo_md_set_checksum_uncompressed (ZIF_REPO_MD (md), "14f17b894303b4dc9683511104848f75d98cea8f76c107bf25e1b4db5741f6a8");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "get categories");
- array = zif_repo_md_comps_get_categories (md, cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get categories '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- if (array->len == 1)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "incorrect value %i", array->len);
-
- /************************************************************/
- egg_test_title (test, "correct id value");
- category = g_ptr_array_index (array, 0);
- if (g_strcmp0 (pk_category_get_id (category), "apps") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct id '%s'", pk_category_get_id (category));
-
- /************************************************************/
- egg_test_title (test, "correct name value");
- category = g_ptr_array_index (array, 0);
- if (g_strcmp0 (pk_category_get_name (category), "Applications") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct name '%s'", pk_category_get_name (category));
-
- /************************************************************/
- egg_test_title (test, "correct summary value");
- category = g_ptr_array_index (array, 0);
- if (g_strcmp0 (pk_category_get_summary (category), "Applications to perform a variety of tasks") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct summary '%s'", pk_category_get_summary (category));
-
- g_ptr_array_unref (array);
-
- /************************************************************/
- egg_test_title (test, "get groups for category");
- array = zif_repo_md_comps_get_groups_for_category (md, "apps", cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get categories '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- if (array->len == 2)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "incorrect value %i", array->len);
-
- /************************************************************/
- egg_test_title (test, "correct id value");
- category = g_ptr_array_index (array, 0);
- if (g_strcmp0 (pk_category_get_id (category), "admin-tools") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct id '%s'", pk_category_get_id (category));
- g_ptr_array_unref (array);
-
- /************************************************************/
- egg_test_title (test, "get packages for group");
- array = zif_repo_md_comps_get_packages_for_group (md, "admin-tools", cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get categories '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- if (array->len == 2)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "incorrect value %i", array->len);
-
- /************************************************************/
- egg_test_title (test, "correct value");
- id = g_ptr_array_index (array, 0);
- if (g_strcmp0 (id, "gnome-packagekit") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct id '%s'", id);
- g_ptr_array_unref (array);
-
- g_object_unref (md);
- g_object_unref (cancellable);
- g_object_unref (completion);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-repo-md-comps.h b/backends/yum/libzif/zif-repo-md-comps.h
deleted file mode 100644
index e2cef0d..0000000
--- a/backends/yum/libzif/zif-repo-md-comps.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_REPO_MD_COMPS_H
-#define __ZIF_REPO_MD_COMPS_H
-
-#include <glib-object.h>
-
-#include "zif-repo-md.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_REPO_MD_COMPS (zif_repo_md_comps_get_type ())
-#define ZIF_REPO_MD_COMPS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_REPO_MD_COMPS, ZifRepoMdComps))
-#define ZIF_REPO_MD_COMPS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_REPO_MD_COMPS, ZifRepoMdCompsClass))
-#define ZIF_IS_REPO_MD_COMPS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_REPO_MD_COMPS))
-#define ZIF_IS_REPO_MD_COMPS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_REPO_MD_COMPS))
-#define ZIF_REPO_MD_COMPS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_REPO_MD_COMPS, ZifRepoMdCompsClass))
-
-typedef struct _ZifRepoMdComps ZifRepoMdComps;
-typedef struct _ZifRepoMdCompsPrivate ZifRepoMdCompsPrivate;
-typedef struct _ZifRepoMdCompsClass ZifRepoMdCompsClass;
-
-struct _ZifRepoMdComps
-{
- ZifRepoMd parent;
- ZifRepoMdCompsPrivate *priv;
-};
-
-struct _ZifRepoMdCompsClass
-{
- ZifRepoMdClass parent_class;
-};
-
-GType zif_repo_md_comps_get_type (void);
-ZifRepoMdComps *zif_repo_md_comps_new (void);
-
-GPtrArray *zif_repo_md_comps_get_categories (ZifRepoMdComps *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_comps_get_groups_for_category (ZifRepoMdComps *md,
- const gchar *category_id,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_comps_get_packages_for_group (ZifRepoMdComps *md,
- const gchar *group_id,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_REPO_MD_COMPS_H */
-
diff --git a/backends/yum/libzif/zif-repo-md-filelists.c b/backends/yum/libzif/zif-repo-md-filelists.c
deleted file mode 100644
index 0bd808a..0000000
--- a/backends/yum/libzif/zif-repo-md-filelists.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-repo-md-filelists
- * @short_description: File list metadata functionality
- *
- * Provide access to the file list metadata.
- * This object is a subclass of #ZifRepoMd
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glib.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sqlite3.h>
-#include <gio/gio.h>
-
-#include "zif-repo-md.h"
-#include "zif-repo-md-filelists.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_REPO_MD_FILELISTS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPO_MD_FILELISTS, ZifRepoMdFilelistsPrivate))
-
-/**
- * ZifRepoMdFilelistsPrivate:
- *
- * Private #ZifRepoMdFilelists data
- **/
-struct _ZifRepoMdFilelistsPrivate
-{
- gboolean loaded;
- sqlite3 *db;
-};
-
-typedef struct {
- gchar *filename;
- GPtrArray *array;
-} ZifRepoMdFilelistsData;
-
-G_DEFINE_TYPE (ZifRepoMdFilelists, zif_repo_md_filelists, ZIF_TYPE_REPO_MD)
-
-/**
- * zif_repo_md_filelists_unload:
- **/
-static gboolean
-zif_repo_md_filelists_unload (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = FALSE;
- return ret;
-}
-
-/**
- * zif_repo_md_filelists_load:
- **/
-static gboolean
-zif_repo_md_filelists_load (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- const gchar *filename;
- gint rc;
- ZifRepoMdFilelists *filelists = ZIF_REPO_MD_FILELISTS (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_FILELISTS (md), FALSE);
-
- /* already loaded */
- if (filelists->priv->loaded)
- goto out;
-
- /* get filename */
- filename = zif_repo_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get filename for filelists");
- goto out;
- }
-
- /* open database */
- egg_debug ("filename = %s", filename);
- rc = sqlite3_open (filename, &filelists->priv->db);
- if (rc != 0) {
- egg_warning ("Can't open database: %s\n", sqlite3_errmsg (filelists->priv->db));
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "can't open database: %s", sqlite3_errmsg (filelists->priv->db));
- goto out;
- }
-
- /* we don't need to keep syncing */
- sqlite3_exec (filelists->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
- filelists->priv->loaded = TRUE;
-out:
- return filelists->priv->loaded;
-}
-
-/**
- * zif_store_remote_sqlite_get_id_cb:
- **/
-static gint
-zif_repo_md_filelists_sqlite_get_id_cb (void *data, gint argc, gchar **argv, gchar **col_name)
-{
- gchar **pkgid = (gchar **) data;
- *pkgid = g_strdup (argv[0]);
- return 0;
-}
-
-/**
- * zif_repo_md_filelists_sqlite_get_files_cb:
- **/
-static gint
-zif_repo_md_filelists_sqlite_get_files_cb (void *data, gint argc, gchar **argv, gchar **col_name)
-{
- gint i;
- gchar **filenames = NULL;
- gchar **filenames_r = NULL;
- gchar **id_r = NULL;
- ZifRepoMdFilelistsData *fldata = (ZifRepoMdFilelistsData *) data;
-
- /* get pointers to the arguments */
- for (i=0;i<argc;i++) {
- if (g_strcmp0 (col_name[i], "pkgKey") == 0)
- id_r = &argv[i];
- else if (g_strcmp0 (col_name[i], "filenames") == 0)
- filenames_r = &argv[i];
- }
-
- /* either is undereferencable */
- if (filenames_r == NULL || id_r == NULL) {
- egg_warning ("no file data");
- goto out;
- }
-
- /* split the filenames */
- filenames = g_strsplit (*filenames_r, "/", -1);
- for (i=0; filenames[i] != NULL ;i++) {
- /* do we match */
- if (g_strcmp0 (fldata->filename, filenames[i]) == 0) {
- egg_debug ("found %s for %s", filenames[i], *id_r);
- g_ptr_array_add (fldata->array, GUINT_TO_POINTER (atoi (*id_r)));
- }
- }
-out:
- g_strfreev (filenames);
- return 0;
-}
-
-/**
- * zif_repo_md_filelists_search_file:
- * @md: the #ZifRepoMdFilelists object
- * @search: the full path that should be searched for
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Gets a list of all packages that contain the file.
- * Results are pkgId's descriptors, i.e. 64 bit hashes as test.
- *
- * Return value: a string list of pkgId's
- **/
-GPtrArray *
-zif_repo_md_filelists_search_file (ZifRepoMdFilelists *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- GPtrArray *array = NULL;
- gchar *statement = NULL;
- gchar *error_msg = NULL;
- gint rc;
- gboolean ret;
- guint i;
- GError *error_local = NULL;
- gchar *filename = NULL;
- gchar *dirname = NULL;
- ZifRepoMdFilelistsData *data = NULL;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_FILELISTS (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to load store file: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* split the search term into directory and filename */
- dirname = g_path_get_dirname (search);
- filename = g_path_get_basename (search);
- egg_debug ("dirname=%s, filename=%s", dirname, filename);
-
- /* create data struct we can pass to the callback */
- data = g_new0 (ZifRepoMdFilelistsData, 1);
- data->filename = g_path_get_basename (search);
- data->array = g_ptr_array_new ();
-
- /* populate _array with guint pkgKey */
- statement = g_strdup_printf ("SELECT filenames, pkgKey FROM filelist WHERE dirname = '%s'", dirname);
- rc = sqlite3_exec (md->priv->db, statement, zif_repo_md_filelists_sqlite_get_files_cb, data, &error_msg);
- g_free (statement);
- if (rc != SQLITE_OK) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "SQL error (failed to get keys): %s\n", error_msg);
- sqlite3_free (error_msg);
- goto out;
- }
-
- /* convert each pkgKey */
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- for (i=0; i<data->array->len; i++) {
- guint key;
- gchar *pkgid = NULL;
-
- /* convert the pkgKey to a pkgId */
- key = GPOINTER_TO_UINT (g_ptr_array_index (data->array, i));
- statement = g_strdup_printf ("SELECT pkgId FROM packages WHERE pkgKey = %i LIMIT 1", key);
- rc = sqlite3_exec (md->priv->db, statement, zif_repo_md_filelists_sqlite_get_id_cb, &pkgid, &error_msg);
- g_free (statement);
- if (rc != SQLITE_OK) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "SQL error (failed to get packages): %s", error_msg);
- sqlite3_free (error_msg);
- goto out;
- }
-
- /* we failed to get any results */
- if (pkgid == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "failed to resolve pkgKey: %i", key);
- goto out;
- }
-
- /* added to tracked array, so no need to free pkgid */
- g_ptr_array_add (array, pkgid);
- }
-out:
- if (data != NULL) {
- g_free (data->filename);
- g_ptr_array_unref (data->array);
- g_free (data);
- }
- g_free (dirname);
- g_free (filename);
- return array;
-}
-
-/**
- * zif_repo_md_filelists_finalize:
- **/
-static void
-zif_repo_md_filelists_finalize (GObject *object)
-{
- ZifRepoMdFilelists *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_REPO_MD_FILELISTS (object));
- md = ZIF_REPO_MD_FILELISTS (object);
-
- sqlite3_close (md->priv->db);
-
- G_OBJECT_CLASS (zif_repo_md_filelists_parent_class)->finalize (object);
-}
-
-/**
- * zif_repo_md_filelists_class_init:
- **/
-static void
-zif_repo_md_filelists_class_init (ZifRepoMdFilelistsClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ZifRepoMdClass *repo_md_class = ZIF_REPO_MD_CLASS (klass);
- object_class->finalize = zif_repo_md_filelists_finalize;
-
- /* map */
- repo_md_class->load = zif_repo_md_filelists_load;
- repo_md_class->unload = zif_repo_md_filelists_unload;
- g_type_class_add_private (klass, sizeof (ZifRepoMdFilelistsPrivate));
-}
-
-/**
- * zif_repo_md_filelists_init:
- **/
-static void
-zif_repo_md_filelists_init (ZifRepoMdFilelists *md)
-{
- md->priv = ZIF_REPO_MD_FILELISTS_GET_PRIVATE (md);
- md->priv->loaded = FALSE;
- md->priv->db = NULL;
-}
-
-/**
- * zif_repo_md_filelists_new:
- *
- * Return value: A new #ZifRepoMdFilelists class instance.
- *
- * Since: 0.0.1
- **/
-ZifRepoMdFilelists *
-zif_repo_md_filelists_new (void)
-{
- ZifRepoMdFilelists *md;
- md = g_object_new (ZIF_TYPE_REPO_MD_FILELISTS, NULL);
- return ZIF_REPO_MD_FILELISTS (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_repo_md_filelists_test (EggTest *test)
-{
- ZifRepoMdFilelists *md;
- gboolean ret;
- GError *error = NULL;
- GPtrArray *array;
- const gchar *pkgid;
- GCancellable *cancellable;
- ZifCompletion *completion;
-
- if (!egg_test_start (test, "ZifRepoMdFilelists"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
-
- /************************************************************/
- egg_test_title (test, "get store_remote md");
- md = zif_repo_md_filelists_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_repo_md_set_id (ZIF_REPO_MD (md), "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set type");
- ret = zif_repo_md_set_mdtype (ZIF_REPO_MD (md), ZIF_REPO_MD_TYPE_FILELISTS_DB);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum type");
- ret = zif_repo_md_set_checksum_type (ZIF_REPO_MD (md), G_CHECKSUM_SHA256);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum compressed");
- ret = zif_repo_md_set_checksum (ZIF_REPO_MD (md), "e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum uncompressed");
- ret = zif_repo_md_set_checksum_uncompressed (ZIF_REPO_MD (md), "2b4336cb43e75610662bc0b3a362ca4cb7ba874528735a27c0d55148c3901792");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set filename");
- ret = zif_repo_md_set_filename (ZIF_REPO_MD (md), "../test/cache/fedora/e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9-filelists.sqlite.bz2");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "load");
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to load '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "search for files");
- array = zif_repo_md_filelists_search_file (md, "/usr/bin/gnome-power-manager", cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to search '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- egg_test_assert (test, array->len == 1);
-
- /************************************************************/
- egg_test_title (test, "correct value");
- pkgid = g_ptr_array_index (array, 0);
- if (pkgid[0] != '\0' && strlen (pkgid) == 64)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get a correct pkgId '%s' (%i)", pkgid, strlen (pkgid));
- g_ptr_array_unref (array);
-
- g_object_unref (md);
- g_object_unref (cancellable);
- g_object_unref (completion);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-repo-md-filelists.h b/backends/yum/libzif/zif-repo-md-filelists.h
deleted file mode 100644
index 465fd4f..0000000
--- a/backends/yum/libzif/zif-repo-md-filelists.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_REPO_MD_FILELISTS_H
-#define __ZIF_REPO_MD_FILELISTS_H
-
-#include <glib-object.h>
-
-#include "zif-repo-md.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_REPO_MD_FILELISTS (zif_repo_md_filelists_get_type ())
-#define ZIF_REPO_MD_FILELISTS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_REPO_MD_FILELISTS, ZifRepoMdFilelists))
-#define ZIF_REPO_MD_FILELISTS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_REPO_MD_FILELISTS, ZifRepoMdFilelistsClass))
-#define ZIF_IS_REPO_MD_FILELISTS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_REPO_MD_FILELISTS))
-#define ZIF_IS_REPO_MD_FILELISTS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_REPO_MD_FILELISTS))
-#define ZIF_REPO_MD_FILELISTS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_REPO_MD_FILELISTS, ZifRepoMdFilelistsClass))
-
-typedef struct _ZifRepoMdFilelists ZifRepoMdFilelists;
-typedef struct _ZifRepoMdFilelistsPrivate ZifRepoMdFilelistsPrivate;
-typedef struct _ZifRepoMdFilelistsClass ZifRepoMdFilelistsClass;
-
-struct _ZifRepoMdFilelists
-{
- ZifRepoMd parent;
- ZifRepoMdFilelistsPrivate *priv;
-};
-
-struct _ZifRepoMdFilelistsClass
-{
- ZifRepoMdClass parent_class;
-};
-
-GType zif_repo_md_filelists_get_type (void);
-ZifRepoMdFilelists *zif_repo_md_filelists_new (void);
-GPtrArray *zif_repo_md_filelists_search_file (ZifRepoMdFilelists *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_REPO_MD_FILELISTS_H */
-
diff --git a/backends/yum/libzif/zif-repo-md-metalink.c b/backends/yum/libzif/zif-repo-md-metalink.c
deleted file mode 100644
index 743a133..0000000
--- a/backends/yum/libzif/zif-repo-md-metalink.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-repo-md-metalink
- * @short_description: Metalink metadata functionality
- *
- * Provide access to the metalink repo metadata.
- * This object is a subclass of #ZifRepoMd
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <glib.h>
-#include <string.h>
-
-#include "zif-repo-md.h"
-#include "zif-repo-md-metalink.h"
-#include "zif-config.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_REPO_MD_METALINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPO_MD_METALINK, ZifRepoMdMetalinkPrivate))
-
-typedef enum {
- ZIF_REPO_MD_METALINK_PARSER_SECTION_URL,
- ZIF_REPO_MD_METALINK_PARSER_SECTION_UNKNOWN
-} ZifRepoMdMetalinkParserSection;
-
-typedef enum {
- ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_FTP,
- ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_HTTP,
- ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_RSYNC,
- ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_UNKNOWN
-} ZifRepoMdMetalinkProtocolType;
-
-typedef struct {
- ZifRepoMdMetalinkProtocolType protocol;
- gchar *uri;
- guint preference;
-} ZifRepoMdMetalinkData;
-
-/**
- * ZifRepoMdMetalinkPrivate:
- *
- * Private #ZifRepoMdMetalink data
- **/
-struct _ZifRepoMdMetalinkPrivate
-{
- gboolean loaded;
- GPtrArray *array;
- ZifConfig *config;
- /* for parser */
- ZifRepoMdMetalinkParserSection section;
- ZifRepoMdMetalinkData *temp;
-};
-
-G_DEFINE_TYPE (ZifRepoMdMetalink, zif_repo_md_metalink, ZIF_TYPE_REPO_MD)
-
-/**
- * zif_repo_md_metalink_protocol_type_from_text:
- **/
-static ZifRepoMdMetalinkProtocolType
-zif_repo_md_metalink_protocol_type_from_text (const gchar *type_text)
-{
- if (g_strcmp0 (type_text, "ftp") == 0)
- return ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_FTP;
- if (g_strcmp0 (type_text, "http") == 0)
- return ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_HTTP;
- if (g_strcmp0 (type_text, "rsync") == 0)
- return ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_RSYNC;
- return ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_UNKNOWN;
-}
-
-/**
- * zif_repo_md_metalink_parser_start_element:
- **/
-static void
-zif_repo_md_metalink_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
- const gchar **attribute_names, const gchar **attribute_values,
- gpointer user_data, GError **error)
-{
- guint i;
- ZifRepoMdMetalink *metalink = user_data;
-
- g_return_if_fail (ZIF_IS_REPO_MD_METALINK (metalink));
- g_return_if_fail (metalink->priv->temp == NULL);
-
- /* just ignore non url entries */
- if (g_strcmp0 (element_name, "url") != 0) {
- metalink->priv->temp = NULL;
- metalink->priv->section = ZIF_REPO_MD_METALINK_PARSER_SECTION_UNKNOWN;
- goto out;
- }
-
- /* create new element */
- metalink->priv->section = ZIF_REPO_MD_METALINK_PARSER_SECTION_URL;
- metalink->priv->temp = g_new0 (ZifRepoMdMetalinkData, 1);
-
- /* read keys */
- for (i=0; attribute_names[i] != NULL; i++) {
- if (g_strcmp0 (attribute_names[i], "protocol") == 0)
- metalink->priv->temp->protocol = zif_repo_md_metalink_protocol_type_from_text (attribute_values[i]);
- if (g_strcmp0 (attribute_names[i], "preference") == 0)
- metalink->priv->temp->preference = atoi (attribute_values[i]);
- }
-
- /* add to array */
- g_ptr_array_add (metalink->priv->array, metalink->priv->temp);
-out:
- return;
-}
-
-/**
- * zif_repo_md_metalink_parser_end_element:
- **/
-static void
-zif_repo_md_metalink_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
- gpointer user_data, GError **error)
-{
- ZifRepoMdMetalink *metalink = user_data;
- metalink->priv->temp = NULL;
- metalink->priv->section = ZIF_REPO_MD_METALINK_PARSER_SECTION_UNKNOWN;
-}
-
-/**
- * zif_repo_md_metalink_parser_text:
- **/
-static void
-zif_repo_md_metalink_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
- gpointer user_data, GError **error)
-
-{
- ZifRepoMdMetalink *metalink = user_data;
- gchar *uri = NULL;
- guint len;
-
- if (metalink->priv->section != ZIF_REPO_MD_METALINK_PARSER_SECTION_URL)
- goto out;
-
- /* shouldn't happen */
- if (metalink->priv->temp == NULL) {
- egg_warning ("no data, so cannot save %s!", text);
- goto out;
- }
-
- /* save uri */
- if (metalink->priv->temp->uri != NULL) {
- egg_warning ("previously set uri to '%s', cannot overwrite with '%s'", metalink->priv->temp->uri, text);
- goto out;
- }
-
- /* copy */
- uri = g_strdup (text);
-
- /* do we need to trim the junk from the end */
- if (g_str_has_suffix (uri, "/repodata/repomd.xml")) {
- len = strlen (uri);
- uri[len-19] = '\0';
- }
-
- /* save */
- metalink->priv->temp->uri = g_strdup (uri);
-out:
- g_free (uri);
- return;
-}
-
-/**
- * zif_repo_md_metalink_unload:
- **/
-static gboolean
-zif_repo_md_metalink_unload (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = FALSE;
- return ret;
-}
-
-/**
- * zif_repo_md_metalink_load:
- **/
-static gboolean
-zif_repo_md_metalink_load (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = TRUE;
- gchar *contents = NULL;
- const gchar *filename;
- gsize size;
- GMarkupParseContext *context = NULL;
- const GMarkupParser gpk_repo_md_metalink_markup_parser = {
- zif_repo_md_metalink_parser_start_element,
- zif_repo_md_metalink_parser_end_element,
- zif_repo_md_metalink_parser_text,
- NULL, /* passthrough */
- NULL /* error */
- };
- ZifRepoMdMetalink *metalink = ZIF_REPO_MD_METALINK (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_METALINK (md), FALSE);
-
- /* already loaded */
- if (metalink->priv->loaded)
- goto out;
-
- /* get filename */
- filename = zif_repo_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get filename for metalink");
- goto out;
- }
-
- /* open database */
- egg_debug ("filename = %s", filename);
-
- /* get repo contents */
- ret = g_file_get_contents (filename, &contents, &size, error);
- if (!ret)
- goto out;
-
- /* create parser */
- context = g_markup_parse_context_new (&gpk_repo_md_metalink_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, metalink, NULL);
-
- /* parse data */
- ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
- if (!ret)
- goto out;
-
- metalink->priv->loaded = TRUE;
-out:
- if (context != NULL)
- g_markup_parse_context_free (context);
- g_free (contents);
- return ret;
-}
-
-/**
- * zif_repo_md_metalink_get_uris:
- * @md: the #ZifRepoMdMetalink object
- * @threshold: the threshold in percent
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all mirrors we should use.
- *
- * Return value: the uris to use as an array of strings
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_metalink_get_uris (ZifRepoMdMetalink *md, guint threshold, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret;
- guint len;
- gchar *uri;
- GPtrArray *array = NULL;
- GError *error_local = NULL;
- ZifRepoMdMetalinkData *data;
- guint i;
- ZifRepoMdMetalink *metalink = ZIF_REPO_MD_METALINK (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_METALINK (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* if not already loaded, load */
- if (!metalink->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to get mirrors from metalink: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* get list */
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- len = metalink->priv->array->len;
- for (i=0; i<len; i++) {
- data = g_ptr_array_index (metalink->priv->array, i);
-
- /* ignore not http mirrors */
- if (data->protocol != ZIF_REPO_MD_METALINK_PROTOCOL_TYPE_HTTP)
- continue;
-
- /* ignore low priority */
- if (data->preference >= threshold) {
- uri = zif_config_expand_substitutions (md->priv->config, data->uri, &error_local);
- if (uri == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to expand substitutions: %s", error_local->message);
- g_error_free (error_local);
- /* rip apart what we've done already */
- g_ptr_array_unref (array);
- array = NULL;
- goto out;
- }
- g_ptr_array_add (array, uri);
- }
- }
-out:
- return array;
-}
-
-/**
- * zif_repo_md_metalink_free_data:
- **/
-static void
-zif_repo_md_metalink_free_data (ZifRepoMdMetalinkData *data)
-{
- g_free (data->uri);
- g_free (data);
-}
-
-/**
- * zif_repo_md_metalink_finalize:
- **/
-static void
-zif_repo_md_metalink_finalize (GObject *object)
-{
- ZifRepoMdMetalink *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_REPO_MD_METALINK (object));
- md = ZIF_REPO_MD_METALINK (object);
-
- g_ptr_array_unref (md->priv->array);
- g_object_unref (md->priv->config);
-
- G_OBJECT_CLASS (zif_repo_md_metalink_parent_class)->finalize (object);
-}
-
-/**
- * zif_repo_md_metalink_class_init:
- **/
-static void
-zif_repo_md_metalink_class_init (ZifRepoMdMetalinkClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ZifRepoMdClass *repo_md_class = ZIF_REPO_MD_CLASS (klass);
- object_class->finalize = zif_repo_md_metalink_finalize;
-
- /* map */
- repo_md_class->load = zif_repo_md_metalink_load;
- repo_md_class->unload = zif_repo_md_metalink_unload;
- g_type_class_add_private (klass, sizeof (ZifRepoMdMetalinkPrivate));
-}
-
-/**
- * zif_repo_md_metalink_init:
- **/
-static void
-zif_repo_md_metalink_init (ZifRepoMdMetalink *md)
-{
- md->priv = ZIF_REPO_MD_METALINK_GET_PRIVATE (md);
- md->priv->loaded = FALSE;
- md->priv->config = zif_config_new ();
- md->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) zif_repo_md_metalink_free_data);
-}
-
-/**
- * zif_repo_md_metalink_new:
- *
- * Return value: A new #ZifRepoMdMetalink class instance.
- *
- * Since: 0.0.1
- **/
-ZifRepoMdMetalink *
-zif_repo_md_metalink_new (void)
-{
- ZifRepoMdMetalink *md;
- md = g_object_new (ZIF_TYPE_REPO_MD_METALINK, NULL);
- return ZIF_REPO_MD_METALINK (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_repo_md_metalink_test (EggTest *test)
-{
- ZifRepoMdMetalink *md;
- gboolean ret;
- GError *error = NULL;
- GPtrArray *array;
- const gchar *uri;
- GCancellable *cancellable;
- ZifCompletion *completion;
- ZifConfig *config;
-
- if (!egg_test_start (test, "ZifRepoMdMetalink"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
- config = zif_config_new ();
- zif_config_set_filename (config, "../test/etc/yum.conf", NULL);
-
- /************************************************************/
- egg_test_title (test, "get repo_md_metalink md");
- md = zif_repo_md_metalink_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_repo_md_set_id (ZIF_REPO_MD (md), "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set type");
- ret = zif_repo_md_set_mdtype (ZIF_REPO_MD (md), ZIF_REPO_MD_TYPE_METALINK);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set filename");
- ret = zif_repo_md_set_filename (ZIF_REPO_MD (md), "../test/cache/fedora/metalink.xml");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "load");
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to load '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "get uris");
- array = zif_repo_md_metalink_get_uris (md, 50, cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to search '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- if (array->len == 47)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "incorrect value %i", array->len);
-
- /************************************************************/
- egg_test_title (test, "correct value");
- uri = g_ptr_array_index (array, 0);
- if (g_strcmp0 (uri, "http://www.mirrorservice.org/sites/download.fedora.redhat.com/pub/fedora/linux/releases/12/Everything/i386/os/") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct url '%s'", uri);
- g_ptr_array_unref (array);
-
- g_object_unref (md);
- g_object_unref (cancellable);
- g_object_unref (completion);
- g_object_unref (config);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-repo-md-metalink.h b/backends/yum/libzif/zif-repo-md-metalink.h
deleted file mode 100644
index 3d2971f..0000000
--- a/backends/yum/libzif/zif-repo-md-metalink.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_REPO_MD_METALINK_H
-#define __ZIF_REPO_MD_METALINK_H
-
-#include <glib-object.h>
-
-#include "zif-repo-md.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_REPO_MD_METALINK (zif_repo_md_metalink_get_type ())
-#define ZIF_REPO_MD_METALINK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_REPO_MD_METALINK, ZifRepoMdMetalink))
-#define ZIF_REPO_MD_METALINK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_REPO_MD_METALINK, ZifRepoMdMetalinkClass))
-#define ZIF_IS_REPO_MD_METALINK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_REPO_MD_METALINK))
-#define ZIF_IS_REPO_MD_METALINK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_REPO_MD_METALINK))
-#define ZIF_REPO_MD_METALINK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_REPO_MD_METALINK, ZifRepoMdMetalinkClass))
-
-typedef struct _ZifRepoMdMetalink ZifRepoMdMetalink;
-typedef struct _ZifRepoMdMetalinkPrivate ZifRepoMdMetalinkPrivate;
-typedef struct _ZifRepoMdMetalinkClass ZifRepoMdMetalinkClass;
-
-struct _ZifRepoMdMetalink
-{
- ZifRepoMd parent;
- ZifRepoMdMetalinkPrivate *priv;
-};
-
-struct _ZifRepoMdMetalinkClass
-{
- ZifRepoMdClass parent_class;
-};
-
-GType zif_repo_md_metalink_get_type (void);
-ZifRepoMdMetalink *zif_repo_md_metalink_new (void);
-GPtrArray *zif_repo_md_metalink_get_uris (ZifRepoMdMetalink *md,
- guint threshold,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_REPO_MD_METALINK_H */
-
diff --git a/backends/yum/libzif/zif-repo-md-mirrorlist.c b/backends/yum/libzif/zif-repo-md-mirrorlist.c
deleted file mode 100644
index cd9077e..0000000
--- a/backends/yum/libzif/zif-repo-md-mirrorlist.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-repo-md-mirrorlist
- * @short_description: Mirrorlist metadata functionality
- *
- * Provide access to the mirrorlist repo metadata.
- * This object is a subclass of #ZifRepoMd
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <glib.h>
-
-#include "zif-repo-md.h"
-#include "zif-repo-md-mirrorlist.h"
-#include "zif-config.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_REPO_MD_MIRRORLIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPO_MD_MIRRORLIST, ZifRepoMdMirrorlistPrivate))
-
-/**
- * ZifRepoMdMirrorlistPrivate:
- *
- * Private #ZifRepoMdMirrorlist data
- **/
-struct _ZifRepoMdMirrorlistPrivate
-{
- gboolean loaded;
- GPtrArray *array;
- ZifConfig *config;
-};
-
-G_DEFINE_TYPE (ZifRepoMdMirrorlist, zif_repo_md_mirrorlist, ZIF_TYPE_REPO_MD)
-
-/**
- * zif_repo_md_mirrorlist_unload:
- **/
-static gboolean
-zif_repo_md_mirrorlist_unload (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = FALSE;
- return ret;
-}
-
-/**
- * zif_repo_md_mirrorlist_load:
- **/
-static gboolean
-zif_repo_md_mirrorlist_load (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = TRUE;
- gchar *contents = NULL;
- const gchar *filename;
- gchar **lines = NULL;
- guint i;
- ZifRepoMdMirrorlist *mirrorlist = ZIF_REPO_MD_MIRRORLIST (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_MIRRORLIST (md), FALSE);
-
- /* already loaded */
- if (mirrorlist->priv->loaded)
- goto out;
-
- /* get filename */
- filename = zif_repo_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get filename for mirrorlist");
- goto out;
- }
-
- /* open database */
- egg_debug ("filename = %s", filename);
-
- /* get repo contents */
- ret = g_file_get_contents (filename, &contents, NULL, error);
- if (!ret)
- goto out;
-
- /* split, and add uris */
- lines = g_strsplit (contents, "\n", -1);
- for (i=0; lines[i] != NULL; i++) {
- if (lines[i][0] == '\0' ||
- lines[i][0] == '#')
- continue;
- if (g_str_has_prefix (lines[i], "http://"))
- g_ptr_array_add (mirrorlist->priv->array, g_strdup (lines[i]));
- }
-
- mirrorlist->priv->loaded = TRUE;
-out:
- g_strfreev (lines);
- g_free (contents);
- return ret;
-}
-
-/**
- * zif_repo_md_mirrorlist_get_uris:
- * @md: the #ZifRepoMdMirrorlist object
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all mirrors we should use.
- *
- * Return value: the uris to use as an array of strings
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_mirrorlist_get_uris (ZifRepoMdMirrorlist *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret;
- guint len;
- GPtrArray *array = NULL;
- GError *error_local = NULL;
- const gchar *data;
- gchar *uri;
- guint i;
- ZifRepoMdMirrorlist *mirrorlist = ZIF_REPO_MD_MIRRORLIST (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_MIRRORLIST (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* if not already loaded, load */
- if (!mirrorlist->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to get uris from mirrorlist: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* get list */
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- len = mirrorlist->priv->array->len;
- for (i=0; i<len; i++) {
- data = g_ptr_array_index (mirrorlist->priv->array, i);
- uri = zif_config_expand_substitutions (md->priv->config, data, &error_local);
- if (uri == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to expand substitutions: %s", error_local->message);
- g_error_free (error_local);
- /* rip apart what we've done already */
- g_ptr_array_unref (array);
- array = NULL;
- goto out;
- }
- g_ptr_array_add (array, uri);
- }
-out:
- return array;
-}
-
-/**
- * zif_repo_md_mirrorlist_finalize:
- **/
-static void
-zif_repo_md_mirrorlist_finalize (GObject *object)
-{
- ZifRepoMdMirrorlist *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_REPO_MD_MIRRORLIST (object));
- md = ZIF_REPO_MD_MIRRORLIST (object);
-
- g_ptr_array_unref (md->priv->array);
- g_object_unref (md->priv->config);
-
- G_OBJECT_CLASS (zif_repo_md_mirrorlist_parent_class)->finalize (object);
-}
-
-/**
- * zif_repo_md_mirrorlist_class_init:
- **/
-static void
-zif_repo_md_mirrorlist_class_init (ZifRepoMdMirrorlistClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ZifRepoMdClass *repo_md_class = ZIF_REPO_MD_CLASS (klass);
- object_class->finalize = zif_repo_md_mirrorlist_finalize;
-
- /* map */
- repo_md_class->load = zif_repo_md_mirrorlist_load;
- repo_md_class->unload = zif_repo_md_mirrorlist_unload;
- g_type_class_add_private (klass, sizeof (ZifRepoMdMirrorlistPrivate));
-}
-
-/**
- * zif_repo_md_mirrorlist_init:
- **/
-static void
-zif_repo_md_mirrorlist_init (ZifRepoMdMirrorlist *md)
-{
- md->priv = ZIF_REPO_MD_MIRRORLIST_GET_PRIVATE (md);
- md->priv->loaded = FALSE;
- md->priv->config = zif_config_new ();
- md->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
-}
-
-/**
- * zif_repo_md_mirrorlist_new:
- *
- * Return value: A new #ZifRepoMdMirrorlist class instance.
- *
- * Since: 0.0.1
- **/
-ZifRepoMdMirrorlist *
-zif_repo_md_mirrorlist_new (void)
-{
- ZifRepoMdMirrorlist *md;
- md = g_object_new (ZIF_TYPE_REPO_MD_MIRRORLIST, NULL);
- return ZIF_REPO_MD_MIRRORLIST (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_repo_md_mirrorlist_test (EggTest *test)
-{
- ZifRepoMdMirrorlist *md;
- gboolean ret;
- GError *error = NULL;
- GPtrArray *array;
- const gchar *uri;
- GCancellable *cancellable;
- ZifCompletion *completion;
- ZifConfig *config;
-
- if (!egg_test_start (test, "ZifRepoMdMirrorlist"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
- config = zif_config_new ();
- zif_config_set_filename (config, "../test/etc/yum.conf", NULL);
-
- /************************************************************/
- egg_test_title (test, "get repo_md_mirrorlist md");
- md = zif_repo_md_mirrorlist_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_repo_md_set_id (ZIF_REPO_MD (md), "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set type");
- ret = zif_repo_md_set_mdtype (ZIF_REPO_MD (md), ZIF_REPO_MD_TYPE_MIRRORLIST);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set filename");
- ret = zif_repo_md_set_filename (ZIF_REPO_MD (md), "../test/cache/mirrorlist.txt");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "load");
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to load '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "get uris");
- array = zif_repo_md_mirrorlist_get_uris (md, cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to search '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- if (array->len == 3)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "incorrect value %i", array->len);
-
- /************************************************************/
- egg_test_title (test, "correct value");
- uri = g_ptr_array_index (array, 0);
- if (g_strcmp0 (uri, "http://rpm.livna.org/repo/11/i386/") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct url '%s'", uri);
- g_ptr_array_unref (array);
-
- g_object_unref (md);
- g_object_unref (cancellable);
- g_object_unref (completion);
- g_object_unref (config);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-repo-md-mirrorlist.h b/backends/yum/libzif/zif-repo-md-mirrorlist.h
deleted file mode 100644
index 77cb548..0000000
--- a/backends/yum/libzif/zif-repo-md-mirrorlist.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_REPO_MD_MIRRORLIST_H
-#define __ZIF_REPO_MD_MIRRORLIST_H
-
-#include <glib-object.h>
-
-#include "zif-repo-md.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_REPO_MD_MIRRORLIST (zif_repo_md_mirrorlist_get_type ())
-#define ZIF_REPO_MD_MIRRORLIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_REPO_MD_MIRRORLIST, ZifRepoMdMirrorlist))
-#define ZIF_REPO_MD_MIRRORLIST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_REPO_MD_MIRRORLIST, ZifRepoMdMirrorlistClass))
-#define ZIF_IS_REPO_MD_MIRRORLIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_REPO_MD_MIRRORLIST))
-#define ZIF_IS_REPO_MD_MIRRORLIST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_REPO_MD_MIRRORLIST))
-#define ZIF_REPO_MD_MIRRORLIST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_REPO_MD_MIRRORLIST, ZifRepoMdMirrorlistClass))
-
-typedef struct _ZifRepoMdMirrorlist ZifRepoMdMirrorlist;
-typedef struct _ZifRepoMdMirrorlistPrivate ZifRepoMdMirrorlistPrivate;
-typedef struct _ZifRepoMdMirrorlistClass ZifRepoMdMirrorlistClass;
-
-struct _ZifRepoMdMirrorlist
-{
- ZifRepoMd parent;
- ZifRepoMdMirrorlistPrivate *priv;
-};
-
-struct _ZifRepoMdMirrorlistClass
-{
- ZifRepoMdClass parent_class;
-};
-
-GType zif_repo_md_mirrorlist_get_type (void);
-ZifRepoMdMirrorlist *zif_repo_md_mirrorlist_new (void);
-GPtrArray *zif_repo_md_mirrorlist_get_uris (ZifRepoMdMirrorlist *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_REPO_MD_MIRRORLIST_H */
-
diff --git a/backends/yum/libzif/zif-repo-md-primary.c b/backends/yum/libzif/zif-repo-md-primary.c
deleted file mode 100644
index 612cbf7..0000000
--- a/backends/yum/libzif/zif-repo-md-primary.c
+++ /dev/null
@@ -1,749 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-repo-md-primary
- * @short_description: Primary metadata functionality
- *
- * Provide access to the primary repo metadata.
- * This object is a subclass of #ZifRepoMd
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glib.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sqlite3.h>
-#include <gio/gio.h>
-
-#include "zif-repo-md.h"
-#include "zif-repo-md-primary.h"
-#include "zif-package-remote.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_REPO_MD_PRIMARY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPO_MD_PRIMARY, ZifRepoMdPrimaryPrivate))
-
-/**
- * ZifRepoMdPrimaryPrivate:
- *
- * Private #ZifRepoMdPrimary data
- **/
-struct _ZifRepoMdPrimaryPrivate
-{
- gboolean loaded;
- sqlite3 *db;
-};
-
-typedef struct {
- const gchar *id;
- GPtrArray *packages;
-} ZifRepoMdPrimaryData;
-
-G_DEFINE_TYPE (ZifRepoMdPrimary, zif_repo_md_primary, ZIF_TYPE_REPO_MD)
-
-/**
- * zif_repo_md_primary_unload:
- **/
-static gboolean
-zif_repo_md_primary_unload (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = FALSE;
- return ret;
-}
-
-/**
- * zif_repo_md_primary_load:
- **/
-static gboolean
-zif_repo_md_primary_load (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- const gchar *filename;
- gint rc;
- ZifRepoMdPrimary *primary = ZIF_REPO_MD_PRIMARY (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), FALSE);
-
- /* already loaded */
- if (primary->priv->loaded)
- goto out;
-
- /* get filename */
- filename = zif_repo_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get filename for primary");
- goto out;
- }
-
- /* open database */
- egg_debug ("filename = %s", filename);
- rc = sqlite3_open (filename, &primary->priv->db);
- if (rc != 0) {
- egg_warning ("Can't open database: %s\n", sqlite3_errmsg (primary->priv->db));
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "can't open database: %s", sqlite3_errmsg (primary->priv->db));
- goto out;
- }
-
- /* we don't need to keep syncing */
- sqlite3_exec (primary->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
- primary->priv->loaded = TRUE;
-out:
- return primary->priv->loaded;
-}
-
-/**
- * zif_repo_md_primary_sqlite_create_package_cb:
- **/
-static gint
-zif_repo_md_primary_sqlite_create_package_cb (void *data, gint argc, gchar **argv, gchar **col_name)
-{
- ZifRepoMdPrimaryData *fldata = (ZifRepoMdPrimaryData *) data;
- ZifPackageRemote *package;
-
- package = zif_package_remote_new ();
- zif_package_remote_set_from_repo (package, argc, col_name, argv, fldata->id, NULL);
- g_ptr_array_add (fldata->packages, package);
-
- return 0;
-}
-
-/**
- * zif_repo_md_primary_search:
- **/
-static GPtrArray *
-zif_repo_md_primary_search (ZifRepoMdPrimary *md, const gchar *pred,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *statement = NULL;
- gchar *error_msg = NULL;
- gint rc;
- gboolean ret;
- GError *error_local = NULL;
- ZifRepoMdPrimaryData *data = NULL;
- GPtrArray *array = NULL;
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to load repo_md_primary file: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* create data struct we can pass to the callback */
- data = g_new0 (ZifRepoMdPrimaryData, 1);
- data->id = zif_repo_md_get_id (ZIF_REPO_MD (md));
- data->packages = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-
- statement = g_strdup_printf ("SELECT pkgId, name, arch, version, "
- "epoch, release, summary, description, url, "
- "rpm_license, rpm_group, size_package, location_href FROM packages %s", pred);
- rc = sqlite3_exec (md->priv->db, statement, zif_repo_md_primary_sqlite_create_package_cb, data, &error_msg);
- if (rc != SQLITE_OK) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "SQL error: %s\n", error_msg);
- sqlite3_free (error_msg);
- g_ptr_array_unref (data->packages);
- goto out;
- }
- /* list of packages */
- array = data->packages;
-out:
- g_free (data);
- g_free (statement);
- return array;
-}
-
-/**
- * zif_repo_md_primary_resolve:
- * @md: the #ZifRepoMdPrimary object
- * @search: the search term, e.g. "gnome-power-manager"
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all remote packages that match the name exactly.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_resolve (ZifRepoMdPrimary *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- pred = g_strdup_printf ("WHERE name = '%s'", search);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_search_name:
- * @md: the #ZifRepoMdPrimary object
- * @search: the search term, e.g. "power"
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match the name.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_search_name (ZifRepoMdPrimary *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- pred = g_strdup_printf ("WHERE name LIKE '%%%s%%'", search);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_search_details:
- * @md: the #ZifRepoMdPrimary object
- * @search: the search term, e.g. "advanced"
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match the name or description.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_search_details (ZifRepoMdPrimary *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- pred = g_strdup_printf ("WHERE name LIKE '%%%s%%' OR summary LIKE '%%%s%%' OR description LIKE '%%%s%%'", search, search, search);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_search_group:
- * @md: the #ZifRepoMdPrimary object
- * @search: the search term, e.g. "games/console"
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match the group.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_search_group (ZifRepoMdPrimary *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- pred = g_strdup_printf ("WHERE rpm_group = '%s'", search);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_search_pkgid:
- * @md: the #ZifRepoMdPrimary object
- * @search: the search term as a 64 bit hash
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match the given pkgId.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_search_pkgid (ZifRepoMdPrimary *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- pred = g_strdup_printf ("WHERE pkgid = '%s'", search);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_search_pkgkey:
- * @md: the #ZifRepoMdPrimary object
- * @pkgkey: the package key, unique to this sqlite file
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match the given pkgId.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_search_pkgkey (ZifRepoMdPrimary *md, guint pkgkey,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- pred = g_strdup_printf ("WHERE pkgKey = '%i'", pkgkey);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_sqlite_pkgkey_cb:
- **/
-static gint
-zif_repo_md_primary_sqlite_pkgkey_cb (void *data, gint argc, gchar **argv, gchar **col_name)
-{
- gint i;
- guint pkgkey;
- gboolean ret;
- GPtrArray *array = (GPtrArray *) data;
-
- /* get the ID */
- for (i=0; i<argc; i++) {
- if (g_strcmp0 (col_name[i], "pkgKey") == 0) {
- ret = egg_strtouint (argv[i], &pkgkey);
- if (ret)
- g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
- else
- egg_warning ("could not parse pkgKey '%s'", argv[i]);
- } else {
- egg_warning ("unrecognized: %s=%s", col_name[i], argv[i]);
- }
- }
- return 0;
-}
-
-/**
- * zif_repo_md_primary_what_provides:
- * @md: the #ZifRepoMdPrimary object
- * @search: the provide, e.g. "mimehandler(application/ogg)"
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match the given provide.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_what_provides (ZifRepoMdPrimary *md, const gchar *search,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *statement = NULL;
- gchar *error_msg = NULL;
- gint rc;
- gboolean ret;
- GError *error_local = NULL;
- GPtrArray *array = NULL;
- GPtrArray *array_tmp = NULL;
- GPtrArray *pkgkey_array = NULL;
- guint i;
- guint pkgkey;
- ZifCompletion *completion_local;
- ZifCompletion *completion_loop;
- ZifPackage *package;
-
- /* setup completion */
- if (md->priv->loaded)
- zif_completion_set_number_steps (completion, 2);
- else
- zif_completion_set_number_steps (completion, 3);
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- completion_local = zif_completion_get_child (completion);
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion_local, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- "failed to load repo_md_primary file: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
-
- /* this section done */
- zif_completion_done (completion);
- }
-
- /* create data struct we can pass to the callback */
- pkgkey_array = g_ptr_array_new ();
- statement = g_strdup_printf ("SELECT pkgKey FROM provides WHERE name = '%s'", search);
- rc = sqlite3_exec (md->priv->db, statement, zif_repo_md_primary_sqlite_pkgkey_cb, pkgkey_array, &error_msg);
- if (rc != SQLITE_OK) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_BAD_SQL,
- "SQL error: %s\n", error_msg);
- sqlite3_free (error_msg);
- goto out;
- }
-
- /* this section done */
- zif_completion_done (completion);
-
- /* output array */
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-
- /* resolve each pkgkey to a package */
- completion_local = zif_completion_get_child (completion);
- if (pkgkey_array->len > 0)
- zif_completion_set_number_steps (completion_local, pkgkey_array->len);
- for (i=0; i<pkgkey_array->len; i++) {
- pkgkey = GPOINTER_TO_UINT (g_ptr_array_index (pkgkey_array, i));
-
- /* get packages for pkgKey */
- completion_loop = zif_completion_get_child (completion_local);
- array_tmp = zif_repo_md_primary_search_pkgkey (md, pkgkey, cancellable, completion, error);
- if (array_tmp == NULL) {
- g_ptr_array_unref (array);
- array = NULL;
- goto out;
- }
-
- /* check we only got one result */
- if (array_tmp->len == 0) {
- egg_warning ("no package for pkgKey %i", pkgkey);
- } else if (array_tmp->len > 1 || array_tmp->len == 0) {
- egg_warning ("more than one package for pkgKey %i", pkgkey);
- } else {
- package = g_ptr_array_index (array_tmp, 0);
- g_ptr_array_add (array, g_object_ref (package));
- }
-
- /* clear array */
- g_ptr_array_unref (array_tmp);
- }
-
- /* this section done */
- zif_completion_done (completion);
-out:
- g_free (statement);
- if (pkgkey_array != NULL)
- g_ptr_array_unref (pkgkey_array);
- return array;
-}
-
-/**
- * zif_repo_md_primary_find_package:
- * @md: the #ZifRepoMdPrimary object
- * @package_id: the PackageId to match
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Finds all packages that match PackageId.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_find_package (ZifRepoMdPrimary *md, const gchar *package_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gchar *pred;
- GPtrArray *array;
- gchar **split;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate, TODO: search version (epoch+release) */
- split = pk_package_id_split (package_id);
- pred = g_strdup_printf ("WHERE name = '%s' AND arch = '%s'", split[PK_PACKAGE_ID_NAME], split[PK_PACKAGE_ID_ARCH]);
- array = zif_repo_md_primary_search (md, pred, cancellable, completion, error);
- g_free (pred);
- g_strfreev (split);
-
- return array;
-}
-
-/**
- * zif_repo_md_primary_get_packages:
- * @md: the #ZifRepoMdPrimary object
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Returns all packages in the repo.
- *
- * Return value: an array of #ZifPackageRemote's
- *
- * Since: 0.0.1
- **/
-GPtrArray *
-zif_repo_md_primary_get_packages (ZifRepoMdPrimary *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- GPtrArray *array;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD_PRIMARY (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* search with predicate */
- array = zif_repo_md_primary_search (md, "", cancellable, completion, error);
- return array;
-}
-
-/**
- * zif_repo_md_primary_finalize:
- **/
-static void
-zif_repo_md_primary_finalize (GObject *object)
-{
- ZifRepoMdPrimary *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_REPO_MD_PRIMARY (object));
- md = ZIF_REPO_MD_PRIMARY (object);
-
- sqlite3_close (md->priv->db);
-
- G_OBJECT_CLASS (zif_repo_md_primary_parent_class)->finalize (object);
-}
-
-/**
- * zif_repo_md_primary_class_init:
- **/
-static void
-zif_repo_md_primary_class_init (ZifRepoMdPrimaryClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ZifRepoMdClass *repo_md_class = ZIF_REPO_MD_CLASS (klass);
- object_class->finalize = zif_repo_md_primary_finalize;
-
- /* map */
- repo_md_class->load = zif_repo_md_primary_load;
- repo_md_class->unload = zif_repo_md_primary_unload;
- g_type_class_add_private (klass, sizeof (ZifRepoMdPrimaryPrivate));
-}
-
-/**
- * zif_repo_md_primary_init:
- **/
-static void
-zif_repo_md_primary_init (ZifRepoMdPrimary *md)
-{
- md->priv = ZIF_REPO_MD_PRIMARY_GET_PRIVATE (md);
- md->priv->loaded = FALSE;
- md->priv->db = NULL;
-}
-
-/**
- * zif_repo_md_primary_new:
- *
- * Return value: A new #ZifRepoMdPrimary class instance.
- *
- * Since: 0.0.1
- **/
-ZifRepoMdPrimary *
-zif_repo_md_primary_new (void)
-{
- ZifRepoMdPrimary *md;
- md = g_object_new (ZIF_TYPE_REPO_MD_PRIMARY, NULL);
- return ZIF_REPO_MD_PRIMARY (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_repo_md_primary_test (EggTest *test)
-{
- ZifRepoMdPrimary *md;
- gboolean ret;
- GError *error = NULL;
- GPtrArray *array;
- ZifPackage *package;
- ZifString *summary;
- GCancellable *cancellable;
- ZifCompletion *completion;
-
- if (!egg_test_start (test, "ZifRepoMdPrimary"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
-
- /************************************************************/
- egg_test_title (test, "get repo_md_primary md");
- md = zif_repo_md_primary_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_repo_md_set_id (ZIF_REPO_MD (md), "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set type");
- ret = zif_repo_md_set_mdtype (ZIF_REPO_MD (md), ZIF_REPO_MD_TYPE_PRIMARY_DB);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum type");
- ret = zif_repo_md_set_checksum_type (ZIF_REPO_MD (md), G_CHECKSUM_SHA256);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum compressed");
- ret = zif_repo_md_set_checksum (ZIF_REPO_MD (md), "35d817e2bac701525fa72cec57387a2e3457bf32642adeee1e345cc180044c86");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum uncompressed");
- ret = zif_repo_md_set_checksum_uncompressed (ZIF_REPO_MD (md), "9b2b072a83b5175bc88d03ee64b52b39c0d40fec1516baa62dba81eea73cc645");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set filename");
- ret = zif_repo_md_set_filename (ZIF_REPO_MD (md), "../test/cache/fedora/35d817e2bac701525fa72cec57387a2e3457bf32642adeee1e345cc180044c86-primary.sqlite.bz2");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "load");
- ret = zif_repo_md_load (ZIF_REPO_MD (md), cancellable, completion, &error);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to load '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "search for files");
- array = zif_repo_md_primary_resolve (md, "gnome-power-manager", cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to search '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- egg_test_assert (test, array->len == 1);
-
- /************************************************************/
- egg_test_title (test, "correct value");
- package = g_ptr_array_index (array, 0);
- summary = zif_package_get_summary (package, NULL);
- if (g_strcmp0 (zif_string_get_value (summary), "GNOME Power Manager") == 0)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get correct summary '%s'", zif_string_get_value (summary));
- zif_string_unref (summary);
- g_ptr_array_unref (array);
-
- g_object_unref (cancellable);
- g_object_unref (completion);
- g_object_unref (md);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-repo-md-primary.h b/backends/yum/libzif/zif-repo-md-primary.h
deleted file mode 100644
index 8b96ffa..0000000
--- a/backends/yum/libzif/zif-repo-md-primary.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_REPO_MD_PRIMARY_H
-#define __ZIF_REPO_MD_PRIMARY_H
-
-#include <glib-object.h>
-#include <packagekit-glib2/packagekit.h>
-
-#include "zif-repo-md.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_REPO_MD_PRIMARY (zif_repo_md_primary_get_type ())
-#define ZIF_REPO_MD_PRIMARY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_REPO_MD_PRIMARY, ZifRepoMdPrimary))
-#define ZIF_REPO_MD_PRIMARY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_REPO_MD_PRIMARY, ZifRepoMdPrimaryClass))
-#define ZIF_IS_REPO_MD_PRIMARY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_REPO_MD_PRIMARY))
-#define ZIF_IS_REPO_MD_PRIMARY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_REPO_MD_PRIMARY))
-#define ZIF_REPO_MD_PRIMARY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_REPO_MD_PRIMARY, ZifRepoMdPrimaryClass))
-
-typedef struct _ZifRepoMdPrimary ZifRepoMdPrimary;
-typedef struct _ZifRepoMdPrimaryPrivate ZifRepoMdPrimaryPrivate;
-typedef struct _ZifRepoMdPrimaryClass ZifRepoMdPrimaryClass;
-
-struct _ZifRepoMdPrimary
-{
- ZifRepoMd parent;
- ZifRepoMdPrimaryPrivate *priv;
-};
-
-struct _ZifRepoMdPrimaryClass
-{
- ZifRepoMdClass parent_class;
-};
-
-GType zif_repo_md_primary_get_type (void);
-ZifRepoMdPrimary *zif_repo_md_primary_new (void);
-GPtrArray *zif_repo_md_primary_search_file (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_search_name (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_search_details (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_search_group (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_search_pkgid (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_search_pkgkey (ZifRepoMdPrimary *md,
- guint pkgkey,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_what_provides (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_resolve (ZifRepoMdPrimary *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_get_packages (ZifRepoMdPrimary *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-GPtrArray *zif_repo_md_primary_find_package (ZifRepoMdPrimary *md,
- const gchar *package_id,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_REPO_MD_PRIMARY_H */
-
diff --git a/backends/yum/libzif/zif-repo-md.c b/backends/yum/libzif/zif-repo-md.c
deleted file mode 100644
index 7ed680a..0000000
--- a/backends/yum/libzif/zif-repo-md.c
+++ /dev/null
@@ -1,931 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-repo-md
- * @short_description: Metadata file common functionality
- *
- * This provides an abstract metadata class.
- * It is implemented by #ZifRepoMdFilelists, #ZifRepoMdMaster and #ZifRepoMdPrimary.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "zif-utils.h"
-#include "zif-repo-md.h"
-#include "zif-config.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_REPO_MD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPO_MD, ZifRepoMdPrivate))
-
-/**
- * ZifRepoMdPrivate:
- *
- * Private #ZifRepoMd data
- **/
-struct _ZifRepoMdPrivate
-{
- gboolean loaded;
- gchar *id; /* fedora */
- gchar *filename; /* /var/cache/yum/fedora/repo.sqlite.bz2 */
- gchar *filename_uncompressed; /* /var/cache/yum/fedora/repo.sqlite */
- guint timestamp;
- gchar *location; /* repodata/35d817e-primary.sqlite.bz2 */
- gchar *checksum; /* of compressed file */
- gchar *checksum_uncompressed; /* of uncompressed file */
- GChecksumType checksum_type;
- ZifRepoMdType type;
- ZifStoreRemote *remote;
- ZifConfig *config;
-};
-
-G_DEFINE_TYPE (ZifRepoMd, zif_repo_md, G_TYPE_OBJECT)
-
-/**
- * zif_repo_md_error_quark:
- *
- * Return value: Our personal error quark.
- *
- * Since: 0.0.1
- **/
-GQuark
-zif_repo_md_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("zif_repo_md_error");
- return quark;
-}
-
-/**
- * zif_repo_md_get_id:
- * @md: the #ZifRepoMd object
- *
- * Gets the md identifier, usually the repo name.
- *
- * Return value: the repo id.
- *
- * Since: 0.0.1
- **/
-const gchar *
-zif_repo_md_get_id (ZifRepoMd *md)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), NULL);
- return md->priv->id;
-}
-
-/**
- * zif_repo_md_get_filename:
- * @md: the #ZifRepoMd object
- *
- * Gets the compressed filename of the repo.
- *
- * Return value: the filename
- *
- * Since: 0.0.1
- **/
-const gchar *
-zif_repo_md_get_filename (ZifRepoMd *md)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), NULL);
- return md->priv->filename;
-}
-
-/**
- * zif_repo_md_get_location:
- * @md: the #ZifRepoMd object
- *
- * Gets the location of the repo.
- *
- * Return value: the location
- *
- * Since: 0.0.1
- **/
-const gchar *
-zif_repo_md_get_location (ZifRepoMd *md)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), NULL);
- return md->priv->location;
-}
-
-/**
- * zif_repo_md_get_mdtype:
- * @md: the #ZifRepoMd object
- *
- * Gets the type of the repo.
- *
- * Return value: the type
- *
- * Since: 0.0.1
- **/
-ZifRepoMdType
-zif_repo_md_get_mdtype (ZifRepoMd *md)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), ZIF_REPO_MD_TYPE_UNKNOWN);
- return md->priv->type;
-}
-
-/**
- * zif_repo_md_get_filename_uncompressed:
- * @md: the #ZifRepoMd object
- *
- * Gets the uncompressed filename of the repo.
- *
- * Return value: the filename
- *
- * Since: 0.0.1
- **/
-const gchar *
-zif_repo_md_get_filename_uncompressed (ZifRepoMd *md)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), NULL);
- return md->priv->filename_uncompressed;
-}
-
-/**
- * zif_repo_md_set_filename:
- * @md: the #ZifRepoMd object
- * @filename: the base filename, e.g. "master.xml.bz2"
- *
- * Sets the filename of the compressed file.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_filename (ZifRepoMd *md, const gchar *filename)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->filename == NULL, FALSE);
- g_return_val_if_fail (filename != NULL, FALSE);
-
- /* this is the compressed name */
- md->priv->filename = g_strdup (filename);
-
- /* this is the uncompressed name */
- md->priv->filename_uncompressed = zif_file_get_uncompressed_name (filename);
-
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_timestamp:
- * @md: the #ZifRepoMd object
- * @timestamp: the timestamp value
- *
- * Sets the timestamp of the compressed file.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_timestamp (ZifRepoMd *md, guint timestamp)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->timestamp == 0, FALSE);
- g_return_val_if_fail (timestamp != 0, FALSE);
-
- /* save new value */
- md->priv->timestamp = timestamp;
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_location:
- * @md: the #ZifRepoMd object
- * @location: the location
- *
- * Sets the location of the compressed file, e.g. "repodata/35d817e-primary.sqlite.bz2"
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_location (ZifRepoMd *md, const gchar *location)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->location == NULL, FALSE);
- g_return_val_if_fail (location != NULL, FALSE);
-
- /* save new value */
- md->priv->location = g_strdup (location);
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_checksum:
- * @md: the #ZifRepoMd object
- * @checksum: the checksum value
- *
- * Sets the checksum of the compressed file.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_checksum (ZifRepoMd *md, const gchar *checksum)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->checksum == NULL, FALSE);
- g_return_val_if_fail (checksum != NULL, FALSE);
-
- /* save new value */
- md->priv->checksum = g_strdup (checksum);
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_checksum_uncompressed:
- * @md: the #ZifRepoMd object
- * @checksum_uncompressed: the uncompressed checksum value
- *
- * Sets the checksum of the uncompressed file.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_checksum_uncompressed (ZifRepoMd *md, const gchar *checksum_uncompressed)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->checksum_uncompressed == NULL, FALSE);
- g_return_val_if_fail (checksum_uncompressed != NULL, FALSE);
-
- /* save new value */
- md->priv->checksum_uncompressed = g_strdup (checksum_uncompressed);
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_checksum_type:
- * @md: the #ZifRepoMd object
- * @checksum_type: the checksum type
- *
- * Sets the checksum_type of the files.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_checksum_type (ZifRepoMd *md, GChecksumType checksum_type)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->checksum_type == 0, FALSE);
-
- /* save new value */
- md->priv->checksum_type = checksum_type;
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_mdtype:
- * @md: the #ZifRepoMd object
- * @type: the metadata type
- *
- * Sets the type of the metadata, e.g. ZIF_REPO_MD_TYPE_FILELISTS_DB.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_mdtype (ZifRepoMd *md, ZifRepoMdType type)
-{
- gboolean ret = TRUE;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->type == ZIF_REPO_MD_TYPE_UNKNOWN, FALSE);
- g_return_val_if_fail (type != ZIF_REPO_MD_TYPE_UNKNOWN, FALSE);
-
- /* save new value */
- md->priv->type = type;
-
- /* metalink is not specified in the repomd.xml file */
- if (type == ZIF_REPO_MD_TYPE_METALINK) {
- zif_repo_md_set_location (md, "metalink.xml");
- goto out;
- }
-
- /* mirrorlist is not specified in the repomd.xml file */
- if (type == ZIF_REPO_MD_TYPE_MIRRORLIST) {
- zif_repo_md_set_location (md, "mirrorlist.txt");
- goto out;
- }
-
- /* check we've got the needed data */
- if (md->priv->location != NULL && (md->priv->checksum == NULL || md->priv->timestamp == 0)) {
- egg_warning ("cannot load md for %s (loc=%s, checksum=%s, checksum_open=%s, timestamp=%i)",
- zif_repo_md_type_to_text (type), md->priv->location,
- md->priv->checksum, md->priv->checksum_uncompressed, md->priv->timestamp);
- ret = FALSE;
- goto out;
- }
-out:
- return ret;
-}
-
-/**
- * zif_repo_md_set_id:
- * @md: the #ZifRepoMd object
- * @id: the repository id, e.g. "fedora"
- *
- * Sets the repository ID for this metadata.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_id (ZifRepoMd *md, const gchar *id)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->id == NULL, FALSE);
- g_return_val_if_fail (id != NULL, FALSE);
-
- md->priv->id = g_strdup (id);
- return TRUE;
-}
-
-/**
- * zif_repo_md_set_id:
- * @md: the #ZifRepoMd object
- * @id: the repository id, e.g. "fedora"
- *
- * Sets the repository ID for this metadata.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_set_store_remote (ZifRepoMd *md, ZifStoreRemote *remote)
-{
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->remote == NULL, FALSE);
- g_return_val_if_fail (remote != NULL, FALSE);
-
- /* do not take a reference, else the parent device never goes away */
- md->priv->remote = remote;
- return TRUE;
-}
-
-/**
- * zif_repo_md_delete_file:
- **/
-static gboolean
-zif_repo_md_delete_file (const gchar *filename)
-{
- gint retval;
- gboolean ret;
-
- /* file exists? */
- ret = g_file_test (filename, G_FILE_TEST_EXISTS);
- if (!ret)
- goto out;
-
- egg_warning ("deleting %s", filename);
-
- /* remove */
- retval = g_unlink (filename);
- if (retval != 0) {
- egg_warning ("failed to delete %s", filename);
- ret = FALSE;
- }
-out:
- return ret;
-}
-
-/**
- * zif_repo_md_load:
- * @md: the #ZifRepoMd object
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Load the metadata store.
- *
- * - Check compressed file
- * if invalid:
- * delete_it()
- * if online:
- * download_it()
- * if failure:
- * abort
- * check_it()
- * if failure:
- * abort
- * else
- * abort
- *
- * - Check uncompressed file
- * if invalid:
- * delete_it()
- * decompress_it()
- * if failure:
- * abort()
- * check_it()
- * if failure:
- * abort
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_load (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret;
- gboolean uncompressed_check;
- gchar *dirname = NULL;
- GError *error_local = NULL;
- ZifRepoMdClass *klass = ZIF_REPO_MD_GET_CLASS (md);
- ZifCompletion *completion_local;
-
- /* no support */
- if (klass->load == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_NO_SUPPORT,
- "operation cannot be performed on this md");
- return FALSE;
- }
-
- /* setup completion */
- zif_completion_set_number_steps (completion, 3);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
-
- /* optimise: if uncompressed file is okay, then don't even check the compressed file */
- uncompressed_check = zif_repo_md_file_check (md, TRUE, &error_local);
- if (uncompressed_check) {
- zif_completion_done (completion);
- goto skip_compressed_check;
- }
-
- /* display any warning */
- egg_warning ("failed checksum for uncompressed: %s", error_local->message);
- g_clear_error (&error_local);
-
- /* check compressed file */
- ret = zif_repo_md_file_check (md, FALSE, &error_local);
- if (!ret) {
- egg_warning ("failed checksum for compressed: %s", error_local->message);
- g_clear_error (&error_local);
-
- /* delete file if it exists */
- zif_repo_md_delete_file (md->priv->filename);
-
- /* if not online, then this is fatal */
- ret = zif_config_get_boolean (md->priv->config, "network", NULL);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_AS_OFFLINE,
- "failed to check %s checksum for %s and offline",
- zif_repo_md_type_to_text (md->priv->type), md->priv->id);
- goto out;
- }
-
- /* download file */
- completion_local = zif_completion_get_child (completion);
- dirname = g_path_get_dirname (md->priv->filename);
- ret = zif_store_remote_download (md->priv->remote, md->priv->location, dirname, cancellable, completion_local, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED_DOWNLOAD,
- "failed to download missing compressed file: %s", error_local->message);
- goto out;
- }
-
- /* check newly downloaded compressed file */
- ret = zif_repo_md_file_check (md, FALSE, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed checksum on downloaded file: %s", error_local->message);
- goto out;
- }
- }
-
- /* this section done */
- zif_completion_done (completion);
-
- /* check uncompressed file */
- if (!uncompressed_check) {
-
- /* delete file if it exists */
- zif_repo_md_delete_file (md->priv->filename_uncompressed);
-
- /* decompress file */
- egg_debug ("decompressing file");
- completion_local = zif_completion_get_child (completion);
- ret = zif_file_decompress (md->priv->filename, md->priv->filename_uncompressed,
- cancellable, completion_local, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to decompress: %s", error_local->message);
- goto out;
- }
-
- /* check newly uncompressed file */
- ret = zif_repo_md_file_check (md, TRUE, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed checksum on decompressed file: %s", error_local->message);
- goto out;
- }
- }
-
-skip_compressed_check:
-
- /* this section done */
- zif_completion_done (completion);
-
- /* do subclassed load */
- completion_local = zif_completion_get_child (completion);
- ret = klass->load (md, cancellable, completion_local, error);
-
- /* this section done */
- zif_completion_done (completion);
-out:
- g_free (dirname);
- return ret;
-}
-
-/**
- * zif_repo_md_unload:
- * @md: the #ZifRepoMd object
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Unload the metadata store.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_unload (ZifRepoMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- ZifRepoMdClass *klass = ZIF_REPO_MD_GET_CLASS (md);
-
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- /* no support */
- if (klass->unload == NULL) {
- g_set_error_literal (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_NO_SUPPORT,
- "operation cannot be performed on this md");
- return FALSE;
- }
-
- return klass->unload (md, cancellable, completion, error);
-}
-
-/**
- * zif_repo_md_clean:
- * @md: the #ZifRepoMd object
- * @error: a #GError which is used on failure, or %NULL
- *
- * Clean the metadata store.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_clean (ZifRepoMd *md, GError **error)
-{
- gboolean ret = FALSE;
- gboolean exists;
- const gchar *filename;
- GFile *file;
- GError *error_local = NULL;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- /* get filename */
- filename = zif_repo_md_get_filename (md);
- if (filename == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get filename for %s", zif_repo_md_type_to_text (md->priv->type));
- ret = FALSE;
- goto out;
- }
-
- /* file does not exist */
- exists = g_file_test (filename, G_FILE_TEST_EXISTS);
- if (exists) {
- file = g_file_new_for_path (filename);
- ret = g_file_delete (file, NULL, &error_local);
- g_object_unref (file);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to delete metadata file %s: %s", filename, error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* get filename */
- filename = zif_repo_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get uncompressed filename for %s", zif_repo_md_type_to_text (md->priv->type));
- ret = FALSE;
- goto out;
- }
-
- /* file does not exist */
- exists = g_file_test (filename, G_FILE_TEST_EXISTS);
- if (exists) {
- file = g_file_new_for_path (filename);
- ret = g_file_delete (file, NULL, &error_local);
- g_object_unref (file);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to delete metadata file %s: %s", filename, error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* okay */
- ret = TRUE;
-out:
- return ret;
-}
-
-/**
- * zif_repo_md_type_to_text:
- *
- * Since: 0.0.1
- **/
-const gchar *
-zif_repo_md_type_to_text (ZifRepoMdType type)
-{
- if (type == ZIF_REPO_MD_TYPE_FILELISTS)
- return "filelists";
- if (type == ZIF_REPO_MD_TYPE_FILELISTS_DB)
- return "filelists_db";
- if (type == ZIF_REPO_MD_TYPE_PRIMARY)
- return "primary";
- if (type == ZIF_REPO_MD_TYPE_PRIMARY_DB)
- return "primary_db";
- if (type == ZIF_REPO_MD_TYPE_OTHER)
- return "other";
- if (type == ZIF_REPO_MD_TYPE_OTHER_DB)
- return "other_db";
- if (type == ZIF_REPO_MD_TYPE_COMPS)
- return "group";
- if (type == ZIF_REPO_MD_TYPE_COMPS_XML)
- return "group_gz";
- if (type == ZIF_REPO_MD_TYPE_METALINK)
- return "metalink";
- if (type == ZIF_REPO_MD_TYPE_MIRRORLIST)
- return "mirrorlist";
- if (type == ZIF_REPO_MD_TYPE_PRESTODELTA)
- return "prestodelta";
- if (type == ZIF_REPO_MD_TYPE_UPDATEINFO)
- return "updateinfo";
- return "unknown";
-}
-
-/**
- * zif_repo_md_file_check:
- * @md: the #ZifRepoMd object
- * @use_uncompressed: If we should check only the uncompresed version
- * @error: a #GError which is used on failure, or %NULL
- *
- * Check the metadata files to make sure they are valid.
- *
- * Return value: %TRUE for success, %FALSE for failure
- *
- * Since: 0.0.1
- **/
-gboolean
-zif_repo_md_file_check (ZifRepoMd *md, gboolean use_uncompressed, GError **error)
-{
- gboolean ret = FALSE;
- GError *error_local = NULL;
- gchar *data = NULL;
- gchar *checksum = NULL;
- const gchar *filename;
- const gchar *checksum_wanted;
- gsize length;
-
- g_return_val_if_fail (ZIF_IS_REPO_MD (md), FALSE);
- g_return_val_if_fail (md->priv->id != NULL, FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- /* metalink has no checksum... */
- if (md->priv->type == ZIF_REPO_MD_TYPE_METALINK ||
- md->priv->type == ZIF_REPO_MD_TYPE_MIRRORLIST) {
- egg_debug ("skipping checksum check on %s", zif_repo_md_type_to_text (md->priv->type));
- ret = TRUE;
- goto out;
- }
-
- /* get correct filename */
- if (use_uncompressed)
- filename = md->priv->filename_uncompressed;
- else
- filename = md->priv->filename;
-
- /* get contents */
- ret = g_file_get_contents (filename, &data, &length, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "failed to get contents of %s: %s", filename, error_local->message);
- g_error_free (error_local);
- goto out;
- }
-
- /* get the one we want */
- if (use_uncompressed)
- checksum_wanted = md->priv->checksum_uncompressed;
- else
- checksum_wanted = md->priv->checksum;
-
- /* no checksum set */
- if (checksum_wanted == NULL) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "checksum not set for %s", filename);
- ret = FALSE;
- goto out;
- }
-
- /* compute checksum */
- checksum = g_compute_checksum_for_data (md->priv->checksum_type, (guchar*) data, length);
-
- /* matches? */
- ret = (g_strcmp0 (checksum, checksum_wanted) == 0);
- if (!ret) {
- g_set_error (error, ZIF_REPO_MD_ERROR, ZIF_REPO_MD_ERROR_FAILED,
- "checksum incorrect, wanted %s, got %s for %s", checksum_wanted, checksum, filename);
- goto out;
- }
- egg_debug ("%s checksum correct (%s)", filename, checksum_wanted);
-out:
- g_free (data);
- g_free (checksum);
- return ret;
-}
-
-/**
- * zif_repo_md_finalize:
- **/
-static void
-zif_repo_md_finalize (GObject *object)
-{
- ZifRepoMd *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_REPO_MD (object));
- md = ZIF_REPO_MD (object);
-
- g_free (md->priv->id);
- g_free (md->priv->filename);
- g_free (md->priv->location);
- g_free (md->priv->checksum);
- g_free (md->priv->checksum_uncompressed);
-
- g_object_unref (md->priv->config);
-
- G_OBJECT_CLASS (zif_repo_md_parent_class)->finalize (object);
-}
-
-/**
- * zif_repo_md_class_init:
- **/
-static void
-zif_repo_md_class_init (ZifRepoMdClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = zif_repo_md_finalize;
- g_type_class_add_private (klass, sizeof (ZifRepoMdPrivate));
-}
-
-/**
- * zif_repo_md_init:
- **/
-static void
-zif_repo_md_init (ZifRepoMd *md)
-{
- md->priv = ZIF_REPO_MD_GET_PRIVATE (md);
- md->priv->type = ZIF_REPO_MD_TYPE_UNKNOWN;
- md->priv->loaded = FALSE;
- md->priv->id = NULL;
- md->priv->filename = NULL;
- md->priv->timestamp = 0;
- md->priv->location = NULL;
- md->priv->checksum = NULL;
- md->priv->checksum_uncompressed = NULL;
- md->priv->checksum_type = 0;
- md->priv->remote = NULL;
- md->priv->config = zif_config_new ();
-}
-
-/**
- * zif_repo_md_new:
- *
- * Return value: A new #ZifRepoMd class instance.
- *
- * Since: 0.0.1
- **/
-ZifRepoMd *
-zif_repo_md_new (void)
-{
- ZifRepoMd *md;
- md = g_object_new (ZIF_TYPE_REPO_MD, NULL);
- return ZIF_REPO_MD (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_repo_md_test (EggTest *test)
-{
- ZifRepoMd *md;
- gboolean ret;
- GError *error = NULL;
- GCancellable *cancellable;
- ZifCompletion *completion;
-
- if (!egg_test_start (test, "ZifRepoMd"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
-
- /************************************************************/
- egg_test_title (test, "get store_remote md");
- md = zif_repo_md_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_repo_md_set_id (md, "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "load");
- ret = zif_repo_md_load (md, cancellable, completion, &error);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to load '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- g_object_unref (md);
- g_object_unref (cancellable);
- g_object_unref (completion);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-repo-md.h b/backends/yum/libzif/zif-repo-md.h
deleted file mode 100644
index 6c4baab..0000000
--- a/backends/yum/libzif/zif-repo-md.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_REPO_MD_H
-#define __ZIF_REPO_MD_H
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "zif-repo-md.h"
-#include "zif-completion.h"
-#include "zif-store-remote.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_REPO_MD (zif_repo_md_get_type ())
-#define ZIF_REPO_MD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_REPO_MD, ZifRepoMd))
-#define ZIF_REPO_MD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_REPO_MD, ZifRepoMdClass))
-#define ZIF_IS_REPO_MD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_REPO_MD))
-#define ZIF_IS_REPO_MD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_REPO_MD))
-#define ZIF_REPO_MD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_REPO_MD, ZifRepoMdClass))
-#define ZIF_REPO_MD_ERROR (zif_repo_md_error_quark ())
-
-typedef struct _ZifRepoMd ZifRepoMd;
-typedef struct _ZifRepoMdPrivate ZifRepoMdPrivate;
-typedef struct _ZifRepoMdClass ZifRepoMdClass;
-
-struct _ZifRepoMd
-{
- GObject parent;
- ZifRepoMdPrivate *priv;
-};
-
-struct _ZifRepoMdClass
-{
- GObjectClass parent_class;
- /* vtable */
- gboolean (*load) (ZifRepoMd *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
- gboolean (*unload) (ZifRepoMd *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-};
-
-/* types of metadata */
-typedef enum {
- ZIF_REPO_MD_TYPE_PRIMARY,
- ZIF_REPO_MD_TYPE_PRIMARY_DB,
- ZIF_REPO_MD_TYPE_FILELISTS,
- ZIF_REPO_MD_TYPE_FILELISTS_DB,
- ZIF_REPO_MD_TYPE_OTHER,
- ZIF_REPO_MD_TYPE_OTHER_DB,
- ZIF_REPO_MD_TYPE_COMPS,
- ZIF_REPO_MD_TYPE_COMPS_XML,
- ZIF_REPO_MD_TYPE_METALINK,
- ZIF_REPO_MD_TYPE_MIRRORLIST,
- ZIF_REPO_MD_TYPE_PRESTODELTA,
- ZIF_REPO_MD_TYPE_UPDATEINFO,
- ZIF_REPO_MD_TYPE_UNKNOWN
-} ZifRepoMdType;
-
-typedef enum {
- ZIF_REPO_MD_ERROR_FAILED,
- ZIF_REPO_MD_ERROR_NO_SUPPORT,
- ZIF_REPO_MD_ERROR_FAILED_TO_LOAD,
- ZIF_REPO_MD_ERROR_FAILED_AS_OFFLINE,
- ZIF_REPO_MD_ERROR_FAILED_DOWNLOAD,
- ZIF_REPO_MD_ERROR_BAD_SQL,
- ZIF_REPO_MD_ERROR_LAST
-} ZifRepoMdError;
-
-GType zif_repo_md_get_type (void);
-GQuark zif_repo_md_error_quark (void);
-ZifRepoMd *zif_repo_md_new (void);
-
-/* setters */
-gboolean zif_repo_md_set_mdtype (ZifRepoMd *md,
- ZifRepoMdType type);
-gboolean zif_repo_md_set_store_remote (ZifRepoMd *md,
- ZifStoreRemote *remote);
-gboolean zif_repo_md_set_id (ZifRepoMd *md,
- const gchar *id);
-gboolean zif_repo_md_set_filename (ZifRepoMd *md,
- const gchar *filename);
-gboolean zif_repo_md_set_timestamp (ZifRepoMd *md,
- guint timestamp);
-gboolean zif_repo_md_set_location (ZifRepoMd *md,
- const gchar *location);
-gboolean zif_repo_md_set_checksum (ZifRepoMd *md,
- const gchar *checksum);
-gboolean zif_repo_md_set_checksum_uncompressed (ZifRepoMd *md,
- const gchar *checksum_uncompressed);
-gboolean zif_repo_md_set_checksum_type (ZifRepoMd *md,
- GChecksumType checksum_type);
-const gchar *zif_repo_md_type_to_text (ZifRepoMdType type);
-
-/* getters */
-const gchar *zif_repo_md_get_id (ZifRepoMd *md);
-ZifRepoMdType zif_repo_md_get_mdtype (ZifRepoMd *md);
-const gchar *zif_repo_md_get_filename (ZifRepoMd *md);
-const gchar *zif_repo_md_get_filename_uncompressed (ZifRepoMd *md);
-guint zif_repo_md_get_age (ZifRepoMd *md,
- GError **error);
-const gchar *zif_repo_md_get_location (ZifRepoMd *md);
-
-/* actions */
-gboolean zif_repo_md_load (ZifRepoMd *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-gboolean zif_repo_md_unload (ZifRepoMd *md,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-gboolean zif_repo_md_clean (ZifRepoMd *md,
- GError **error);
-gboolean zif_repo_md_file_check (ZifRepoMd *md,
- gboolean use_uncompressed,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_REPO_MD_H */
-
diff --git a/backends/yum/libzif/zif-self-test.c b/backends/yum/libzif/zif-self-test.c
index 274290e..c758000 100644
--- a/backends/yum/libzif/zif-self-test.c
+++ b/backends/yum/libzif/zif-self-test.c
@@ -37,14 +37,15 @@ void zif_package_local_test (EggTest *test);
void zif_store_local_test (EggTest *test);
void zif_groups_test (EggTest *test);
void zif_store_remote_test (EggTest *test);
-void zif_repo_md_metalink_test (EggTest *test);
-void zif_repo_md_primary_test (EggTest *test);
-void zif_repo_md_filelists_test (EggTest *test);
-void zif_repo_md_comps_test (EggTest *test);
+void zif_md_metalink_test (EggTest *test);
+void zif_md_primary_test (EggTest *test);
+void zif_md_filelists_test (EggTest *test);
+void zif_md_comps_test (EggTest *test);
void zif_repos_test (EggTest *test);
void zif_download_test (EggTest *test);
void zif_string_test (EggTest *test);
void zif_lock_test (EggTest *test);
+void zif_update_info_test (EggTest *test);
int
main (int argc, char **argv)
@@ -58,15 +59,19 @@ main (int argc, char **argv)
zif_init ();
/* tests go here */
+ zif_md_primary_xml_test (test);
zif_lock_test (test);
zif_completion_test (test);
zif_config_test (test);
zif_string_test (test);
- zif_repo_md_metalink_test (test);
- zif_repo_md_mirrorlist_test (test);
- zif_repo_md_filelists_test (test);
- zif_repo_md_primary_test (test);
- zif_repo_md_comps_test (test);
+ zif_update_test (test);
+ zif_update_info_test (test);
+ zif_md_metalink_test (test);
+ zif_md_mirrorlist_test (test);
+ zif_md_filelists_test (test);
+ zif_md_primary_sql_test (test);
+ zif_md_comps_test (test);
+ zif_md_updateinfo_test (test);
zif_download_test (test);
zif_monitor_test (test);
zif_package_test (test);
diff --git a/backends/yum/libzif/zif-store-array.c b/backends/yum/libzif/zif-store-array.c
index a6fc2ba..467a1fd 100644
--- a/backends/yum/libzif/zif-store-array.c
+++ b/backends/yum/libzif/zif-store-array.c
@@ -260,7 +260,7 @@ zif_store_array_repos_search (GPtrArray *store_array, PkRoleEnum role, const gch
else if (role == PK_ROLE_ENUM_GET_PACKAGES)
part = zif_store_get_packages (store, cancellable, completion_local, &error_local);
else if (role == PK_ROLE_ENUM_GET_UPDATES)
- part = zif_store_get_updates (store, cancellable, completion_local, &error_local);
+ part = zif_store_get_updates (store, (GPtrArray *) search, cancellable, completion_local, &error_local);
else if (role == PK_ROLE_ENUM_WHAT_PROVIDES)
part = zif_store_what_provides (store, search, cancellable, completion_local, &error_local);
else if (role == PK_ROLE_ENUM_GET_CATEGORIES)
@@ -713,12 +713,12 @@ zif_store_array_get_packages (GPtrArray *store_array,
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_get_updates (GPtrArray *store_array,
+zif_store_array_get_updates (GPtrArray *store_array, GPtrArray *packages,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- return zif_store_array_repos_search (store_array, PK_ROLE_ENUM_GET_UPDATES, NULL,
+ return zif_store_array_repos_search (store_array, PK_ROLE_ENUM_GET_UPDATES, (gchar *) packages,
error_cb, user_data, cancellable, completion, error);
}
diff --git a/backends/yum/libzif/zif-store-array.h b/backends/yum/libzif/zif-store-array.h
index 7391c77..23eeed3 100644
--- a/backends/yum/libzif/zif-store-array.h
+++ b/backends/yum/libzif/zif-store-array.h
@@ -128,6 +128,7 @@ GPtrArray *zif_store_array_get_packages (GPtrArray *store_array,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_get_updates (GPtrArray *store_array,
+ GPtrArray *packages,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
diff --git a/backends/yum/libzif/zif-store-remote.c b/backends/yum/libzif/zif-store-remote.c
index 138638d..483c776 100644
--- a/backends/yum/libzif/zif-store-remote.c
+++ b/backends/yum/libzif/zif-store-remote.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
- * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2008-2010 Richard Hughes <richard at hughsie.com>
*
* Licensed under the GNU General Public License Version 2
*
@@ -41,11 +41,13 @@
#include "zif-monitor.h"
#include "zif-package.h"
#include "zif-package-remote.h"
-#include "zif-repo-md-comps.h"
-#include "zif-repo-md-filelists.h"
-#include "zif-repo-md-metalink.h"
-#include "zif-repo-md-mirrorlist.h"
-#include "zif-repo-md-primary.h"
+#include "zif-md-comps.h"
+#include "zif-md-updateinfo.h"
+#include "zif-md-filelists.h"
+#include "zif-md-metalink.h"
+#include "zif-md-mirrorlist.h"
+#include "zif-md-primary-sql.h"
+#include "zif-md-primary-xml.h"
#include "zif-store.h"
#include "zif-store-local.h"
#include "zif-store-remote.h"
@@ -78,18 +80,20 @@ struct _ZifStoreRemotePrivate
gboolean enabled;
gboolean loaded;
gboolean loaded_metadata;
- ZifRepoMd *md_primary;
- ZifRepoMd *md_filelists;
- ZifRepoMd *md_metalink;
- ZifRepoMd *md_mirrorlist;
- ZifRepoMd *md_comps;
+ ZifMd *md_primary_db;
+ ZifMd *md_primary_xml;
+ ZifMd *md_filelists;
+ ZifMd *md_metalink;
+ ZifMd *md_mirrorlist;
+ ZifMd *md_comps;
+ ZifMd *md_updateinfo;
ZifConfig *config;
ZifMonitor *monitor;
ZifLock *lock;
GPtrArray *packages;
/* temp data for the xml parser */
- ZifRepoMdType parser_type;
- ZifRepoMdType parser_section;
+ ZifMdType parser_type;
+ ZifMdType parser_section;
};
G_DEFINE_TYPE (ZifStoreRemote, zif_store_remote, ZIF_TYPE_STORE)
@@ -112,25 +116,46 @@ zif_store_remote_checksum_type_from_text (const gchar *type)
}
/**
+ * zif_store_remote_get_primary:
+ **/
+static ZifMd *
+zif_store_remote_get_primary (ZifStoreRemote *store)
+{
+ g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
+
+ if (zif_md_get_location (store->priv->md_primary_db) != NULL)
+ return store->priv->md_primary_db;
+ if (zif_md_get_location (store->priv->md_primary_xml) != NULL)
+ return store->priv->md_primary_xml;
+
+ /* this should never happen */
+ return NULL;
+}
+
+/**
* zif_store_remote_get_md_from_type:
**/
-static ZifRepoMd *
-zif_store_remote_get_md_from_type (ZifStoreRemote *store, ZifRepoMdType type)
+static ZifMd *
+zif_store_remote_get_md_from_type (ZifStoreRemote *store, ZifMdType type)
{
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
- g_return_val_if_fail (type != ZIF_REPO_MD_TYPE_UNKNOWN, NULL);
+ g_return_val_if_fail (type != ZIF_MD_TYPE_UNKNOWN, NULL);
- if (type == ZIF_REPO_MD_TYPE_FILELISTS_DB)
+ if (type == ZIF_MD_TYPE_FILELISTS_SQL)
return store->priv->md_filelists;
- if (type == ZIF_REPO_MD_TYPE_PRIMARY_DB)
- return store->priv->md_primary;
- if (type == ZIF_REPO_MD_TYPE_OTHER_DB)
+ if (type == ZIF_MD_TYPE_PRIMARY_SQL)
+ return store->priv->md_primary_db;
+ if (type == ZIF_MD_TYPE_PRIMARY_XML)
+ return store->priv->md_primary_xml;
+ if (type == ZIF_MD_TYPE_OTHER_SQL)
return NULL;
- if (type == ZIF_REPO_MD_TYPE_COMPS_XML)
+ if (type == ZIF_MD_TYPE_COMPS_GZ)
return store->priv->md_comps;
- if (type == ZIF_REPO_MD_TYPE_METALINK)
+ if (type == ZIF_MD_TYPE_UPDATEINFO)
+ return store->priv->md_updateinfo;
+ if (type == ZIF_MD_TYPE_METALINK)
return store->priv->md_metalink;
- if (type == ZIF_REPO_MD_TYPE_MIRRORLIST)
+ if (type == ZIF_MD_TYPE_MIRRORLIST)
return store->priv->md_mirrorlist;
return NULL;
}
@@ -144,7 +169,7 @@ zif_store_remote_parser_start_element (GMarkupParseContext *context, const gchar
gpointer user_data, GError **error)
{
guint i, j;
- ZifRepoMd *md;
+ ZifMd *md;
ZifStoreRemote *store = user_data;
GString *string;
@@ -152,31 +177,31 @@ zif_store_remote_parser_start_element (GMarkupParseContext *context, const gchar
if (g_strcmp0 (element_name, "data") == 0) {
/* reset */
- store->priv->parser_type = ZIF_REPO_MD_TYPE_UNKNOWN;
+ store->priv->parser_type = ZIF_MD_TYPE_UNKNOWN;
/* find type */
for (i=0; attribute_names[i] != NULL; i++) {
if (g_strcmp0 (attribute_names[i], "type") == 0) {
if (g_strcmp0 (attribute_values[i], "primary") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_PRIMARY;
+ store->priv->parser_type = ZIF_MD_TYPE_PRIMARY_XML;
else if (g_strcmp0 (attribute_values[i], "primary_db") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_PRIMARY_DB;
+ store->priv->parser_type = ZIF_MD_TYPE_PRIMARY_SQL;
else if (g_strcmp0 (attribute_values[i], "filelists") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_FILELISTS;
+ store->priv->parser_type = ZIF_MD_TYPE_FILELISTS_XML;
else if (g_strcmp0 (attribute_values[i], "filelists_db") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_FILELISTS_DB;
+ store->priv->parser_type = ZIF_MD_TYPE_FILELISTS_SQL;
else if (g_strcmp0 (attribute_values[i], "other") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_OTHER;
+ store->priv->parser_type = ZIF_MD_TYPE_OTHER_XML;
else if (g_strcmp0 (attribute_values[i], "other_db") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_OTHER_DB;
+ store->priv->parser_type = ZIF_MD_TYPE_OTHER_SQL;
else if (g_strcmp0 (attribute_values[i], "group") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_COMPS;
+ store->priv->parser_type = ZIF_MD_TYPE_COMPS;
else if (g_strcmp0 (attribute_values[i], "group_gz") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_COMPS_XML;
+ store->priv->parser_type = ZIF_MD_TYPE_COMPS_GZ;
else if (g_strcmp0 (attribute_values[i], "prestodelta") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_PRESTODELTA;
+ store->priv->parser_type = ZIF_MD_TYPE_PRESTODELTA;
else if (g_strcmp0 (attribute_values[i], "updateinfo") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_UPDATEINFO;
+ store->priv->parser_type = ZIF_MD_TYPE_UPDATEINFO;
else {
if (error != NULL) {
/* we didn't recognise the file type */
@@ -184,8 +209,8 @@ zif_store_remote_parser_start_element (GMarkupParseContext *context, const gchar
g_string_append_printf (string, "unhandled data type '%s', expecting ", attribute_values[i]);
/* list all the types we support */
- for (j=0; j<ZIF_REPO_MD_TYPE_UNKNOWN; j++)
- g_string_append_printf (string, "%s, ", zif_repo_md_type_to_text (j));
+ for (j=0; j<ZIF_MD_TYPE_UNKNOWN; j++)
+ g_string_append_printf (string, "%s, ", zif_md_type_to_text (j));
/* remove triling comma and space */
g_string_set_size (string, string->len - 2);
@@ -204,7 +229,7 @@ zif_store_remote_parser_start_element (GMarkupParseContext *context, const gchar
}
/* not a section we recognise */
- if (store->priv->parser_type == ZIF_REPO_MD_TYPE_UNKNOWN)
+ if (store->priv->parser_type == ZIF_MD_TYPE_UNKNOWN)
goto out;
/* get MetaData object */
@@ -216,7 +241,7 @@ zif_store_remote_parser_start_element (GMarkupParseContext *context, const gchar
if (g_strcmp0 (element_name, "location") == 0) {
for (i=0; attribute_names[i] != NULL; i++) {
if (g_strcmp0 (attribute_names[i], "href") == 0) {
- zif_repo_md_set_location (md, attribute_values[i]);
+ zif_md_set_location (md, attribute_values[i]);
break;
}
}
@@ -228,7 +253,7 @@ zif_store_remote_parser_start_element (GMarkupParseContext *context, const gchar
if (g_strcmp0 (element_name, "checksum") == 0) {
for (i=0; attribute_names[i] != NULL; i++) {
if (g_strcmp0 (attribute_names[i], "type") == 0) {
- zif_repo_md_set_checksum_type (md, zif_store_remote_checksum_type_from_text (attribute_values[i]));
+ zif_md_set_checksum_type (md, zif_store_remote_checksum_type_from_text (attribute_values[i]));
break;
}
}
@@ -263,7 +288,7 @@ zif_store_remote_parser_end_element (GMarkupParseContext *context, const gchar *
/* reset */
store->priv->parser_section = ZIF_STORE_REMOTE_PARSER_SECTION_UNKNOWN;
if (g_strcmp0 (element_name, "data") == 0)
- store->priv->parser_type = ZIF_REPO_MD_TYPE_UNKNOWN;
+ store->priv->parser_type = ZIF_MD_TYPE_UNKNOWN;
}
/**
@@ -274,10 +299,10 @@ zif_store_remote_parser_text (GMarkupParseContext *context, const gchar *text, g
gpointer user_data, GError **error)
{
- ZifRepoMd *md;
+ ZifMd *md;
ZifStoreRemote *store = user_data;
- if (store->priv->parser_type == ZIF_REPO_MD_TYPE_UNKNOWN)
+ if (store->priv->parser_type == ZIF_MD_TYPE_UNKNOWN)
return;
/* get MetaData object */
@@ -286,11 +311,11 @@ zif_store_remote_parser_text (GMarkupParseContext *context, const gchar *text, g
return;
if (store->priv->parser_section == ZIF_STORE_REMOTE_PARSER_SECTION_CHECKSUM)
- zif_repo_md_set_checksum (md, text);
+ zif_md_set_checksum (md, text);
else if (store->priv->parser_section == ZIF_STORE_REMOTE_PARSER_SECTION_CHECKSUM_UNCOMPRESSED)
- zif_repo_md_set_checksum_uncompressed (md, text);
+ zif_md_set_checksum_uncompressed (md, text);
else if (store->priv->parser_section == ZIF_STORE_REMOTE_PARSER_SECTION_TIMESTAMP)
- zif_repo_md_set_timestamp (md, atol (text));
+ zif_md_set_timestamp (md, atol (text));
}
/**
@@ -496,6 +521,75 @@ out:
}
/**
+ * zif_store_remote_get_update_detail:
+ * @store: the #ZifStoreRemote object
+ * @package_id: the package_id of the package to find
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the update detail for a package.
+ *
+ * Return value: a %ZifUpdate, or %NULL for failure
+ *
+ * Since: 0.0.1
+ **/
+ZifUpdate *
+zif_store_remote_get_update_detail (ZifStoreRemote *store, const gchar *package_id,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ ZifUpdate *update = NULL;
+ ZifCompletion *completion_local;
+ GPtrArray *array = NULL;
+ GError *error_local = NULL;
+ gboolean ret;
+
+ /* setup completion */
+ if (store->priv->loaded_metadata)
+ zif_completion_set_number_steps (completion, 1);
+ else
+ zif_completion_set_number_steps (completion, 2);
+
+ /* if not already loaded, load */
+ if (!store->priv->loaded_metadata) {
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_store_remote_load_metadata (store, cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "failed to load metadata: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+ }
+
+ /* actually get the data */
+ completion_local = zif_completion_get_child (completion);
+ array = zif_md_updateinfo_get_detail_for_package (ZIF_MD_UPDATEINFO (store->priv->md_updateinfo), package_id,
+ cancellable, completion_local, &error_local);
+ if (array == NULL) {
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "failed to find any details: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ if (array->len == 1) {
+ update = g_object_ref (g_ptr_array_index (array, 0));
+ goto out;
+ }
+
+ /* FIXME: is this valid? */
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "invalid number of update entries: %i", array->len);
+out:
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ return update;
+}
+
+/**
* zif_store_remote_add_metalink:
**/
static gboolean
@@ -511,7 +605,7 @@ zif_store_remote_add_metalink (ZifStoreRemote *store, GCancellable *cancellable,
ZifDownload *download = NULL;
/* if we're loading the metadata with an empty cache, the file won't yet exist. So download it */
- filename = zif_repo_md_get_filename_uncompressed (store->priv->md_metalink);
+ filename = zif_md_get_filename_uncompressed (store->priv->md_metalink);
if (filename == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"metalink filename not set for %s", store->priv->id);
@@ -545,7 +639,7 @@ zif_store_remote_add_metalink (ZifStoreRemote *store, GCancellable *cancellable,
/* get mirrors */
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_metalink_get_uris (ZIF_REPO_MD_METALINK (store->priv->md_metalink), 50, cancellable, completion_local, &error_local);
+ array = zif_md_metalink_get_uris (ZIF_MD_METALINK (store->priv->md_metalink), 50, cancellable, completion_local, &error_local);
if (array == NULL) {
ret = FALSE;
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -591,7 +685,7 @@ zif_store_remote_add_mirrorlist (ZifStoreRemote *store, GCancellable *cancellabl
ZifDownload *download = NULL;
/* if we're loading the metadata with an empty cache, the file won't yet exist. So download it */
- filename = zif_repo_md_get_filename_uncompressed (store->priv->md_mirrorlist);
+ filename = zif_md_get_filename_uncompressed (store->priv->md_mirrorlist);
if (filename == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"mirrorlist filename not set for %s", store->priv->id);
@@ -625,7 +719,7 @@ zif_store_remote_add_mirrorlist (ZifStoreRemote *store, GCancellable *cancellabl
/* get mirrors */
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_mirrorlist_get_uris (ZIF_REPO_MD_MIRRORLIST (store->priv->md_mirrorlist), cancellable, completion_local, &error_local);
+ array = zif_md_mirrorlist_get_uris (ZIF_MD_MIRRORLIST (store->priv->md_mirrorlist), cancellable, completion_local, &error_local);
if (array == NULL) {
ret = FALSE;
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -679,9 +773,10 @@ zif_store_remote_load_metadata (ZifStoreRemote *store, GCancellable *cancellable
gchar *contents = NULL;
gchar *basename;
gchar *filename;
+ gboolean primary_okay = FALSE;
gsize size;
GError *error_local = NULL;
- ZifRepoMd *md;
+ ZifMd *md;
GMarkupParseContext *context = NULL;
const GMarkupParser gpk_store_remote_markup_parser = {
zif_store_remote_parser_start_element,
@@ -788,44 +883,52 @@ zif_store_remote_load_metadata (ZifStoreRemote *store, GCancellable *cancellable
goto out;
/* set MD id and filename for each repo type */
- for (i=0; i<ZIF_REPO_MD_TYPE_UNKNOWN; i++) {
+ for (i=0; i<ZIF_MD_TYPE_UNKNOWN; i++) {
md = zif_store_remote_get_md_from_type (store, i);
if (md == NULL) {
- /* TODO: until we've created ZifRepoMdComps and ZifRepoMdOther we'll get warnings here */
- egg_debug ("failed to get local store for %s with %s", zif_repo_md_type_to_text (i), store->priv->id);
+ /* TODO: until we've created ZifMdComps and ZifMdOther we'll get warnings here */
+ egg_debug ("failed to get local store for %s with %s", zif_md_type_to_text (i), store->priv->id);
continue;
}
/* no metalink? */
- if (i == ZIF_REPO_MD_TYPE_METALINK)
+ if (i == ZIF_MD_TYPE_METALINK)
continue;
/* no mirrorlist? */
- if (i == ZIF_REPO_MD_TYPE_MIRRORLIST)
+ if (i == ZIF_MD_TYPE_MIRRORLIST)
continue;
+ /* ensure we have at least one primary */
+ location = zif_md_get_location (md);
+ if (location != NULL &&
+ (i == ZIF_MD_TYPE_PRIMARY_SQL ||
+ i == ZIF_MD_TYPE_PRIMARY_XML)) {
+ primary_okay = TRUE;
+ }
+
/* location not set */
- location = zif_repo_md_get_location (md);
if (location == NULL) {
- /* messed up repo file, this is fatal */
- if (i == ZIF_REPO_MD_TYPE_PRIMARY_DB) {
- g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to get primary metadata location for %s", store->priv->id);
- ret = FALSE;
- goto out;
- }
- egg_debug ("no location set for %s with %s", zif_repo_md_type_to_text (i), store->priv->id);
+ egg_debug ("no location set for %s with %s", zif_md_type_to_text (i), store->priv->id);
continue;
}
/* set MD id and filename */
basename = g_path_get_basename (location);
filename = g_build_filename (store->priv->directory, basename, NULL);
- zif_repo_md_set_filename (md, filename);
+ zif_md_set_filename (md, filename);
g_free (basename);
g_free (filename);
}
+ /* messed up repo file, this is fatal */
+ if (!primary_okay) {
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "failed to get primary metadata location for %s", store->priv->id);
+ ret = FALSE;
+ goto out;
+ }
+
/* all okay */
store->priv->loaded_metadata = TRUE;
@@ -876,7 +979,7 @@ zif_store_remote_refresh (ZifStore *store, gboolean force, GCancellable *cancell
const gchar *filename;
ZifCompletion *completion_local = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
- ZifRepoMd *md;
+ ZifMd *md;
guint i;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), FALSE);
@@ -891,7 +994,7 @@ zif_store_remote_refresh (ZifStore *store, gboolean force, GCancellable *cancell
}
/* setup completion with the correct number of steps */
- zif_completion_set_number_steps (completion, (ZIF_REPO_MD_TYPE_UNKNOWN * 2) + 2);
+ zif_completion_set_number_steps (completion, (ZIF_MD_TYPE_UNKNOWN * 2) + 2);
/* not locked */
ret = zif_lock_is_locked (remote->priv->lock, NULL);
@@ -930,28 +1033,28 @@ zif_store_remote_refresh (ZifStore *store, gboolean force, GCancellable *cancell
zif_completion_done (completion);
/* refresh each repo type */
- for (i=0; i<ZIF_REPO_MD_TYPE_UNKNOWN; i++) {
+ for (i=0; i<ZIF_MD_TYPE_UNKNOWN; i++) {
md = zif_store_remote_get_md_from_type (remote, i);
if (md == NULL) {
- egg_debug ("failed to get local store for %s", zif_repo_md_type_to_text (i));
+ egg_debug ("failed to get local store for %s", zif_md_type_to_text (i));
continue;
}
/* get filename */
- filename = zif_repo_md_get_location (md);
+ filename = zif_md_get_location (md);
if (filename == NULL) {
- egg_warning ("no filename set for %s", zif_repo_md_type_to_text (i));
+ egg_warning ("no filename set for %s", zif_md_type_to_text (i));
continue;
}
/* does current uncompressed file equal what repomd says it should be */
- ret = zif_repo_md_file_check (md, TRUE, &error_local);
+ ret = zif_md_file_check (md, TRUE, &error_local);
if (!ret) {
egg_warning ("failed to verify md: %s", error_local->message);
g_clear_error (&error_local);
}
if (ret && !force) {
- egg_debug ("%s is okay, and we're not forcing", zif_repo_md_type_to_text (i));
+ egg_debug ("%s is okay, and we're not forcing", zif_md_type_to_text (i));
continue;
}
@@ -960,7 +1063,7 @@ zif_store_remote_refresh (ZifStore *store, gboolean force, GCancellable *cancell
ret = zif_store_remote_download (remote, filename, remote->priv->directory, cancellable, completion_local, &error_local);
if (!ret) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to refresh %s (%s): %s", zif_repo_md_type_to_text (i), filename, error_local->message);
+ "failed to refresh %s (%s): %s", zif_md_type_to_text (i), filename, error_local->message);
g_error_free (error_local);
goto out;
}
@@ -970,12 +1073,12 @@ zif_store_remote_refresh (ZifStore *store, gboolean force, GCancellable *cancell
/* decompress */
completion_local = zif_completion_get_child (completion);
- filename = zif_repo_md_get_filename (md);
+ filename = zif_md_get_filename (md);
ret = zif_store_file_decompress (filename, cancellable, completion_local, &error_local);
if (!ret) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to decompress %s for %s: %s",
- filename, zif_repo_md_type_to_text (i), error_local->message);
+ filename, zif_md_type_to_text (i), error_local->message);
g_error_free (error_local);
goto out;
}
@@ -1093,14 +1196,14 @@ zif_store_remote_load (ZifStore *store, GCancellable *cancellable, ZifCompletion
/* we have to set this here in case we are using the metalink to download repodata.xml */
if (remote->priv->metalink != NULL) {
filename = g_build_filename (remote->priv->directory, "metalink.xml", NULL);
- zif_repo_md_set_filename (remote->priv->md_metalink, filename);
+ zif_md_set_filename (remote->priv->md_metalink, filename);
g_free (filename);
}
/* we have to set this here in case we are using the mirrorlist to download repodata.xml */
if (remote->priv->mirrorlist != NULL) {
filename = g_build_filename (remote->priv->directory, "mirrorlist.txt", NULL);
- zif_repo_md_set_filename (remote->priv->md_mirrorlist, filename);
+ zif_md_set_filename (remote->priv->md_mirrorlist, filename);
g_free (filename);
}
@@ -1136,7 +1239,7 @@ zif_store_remote_clean (ZifStore *store, GCancellable *cancellable, ZifCompletio
GFile *file;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
- ZifRepoMd *md;
+ ZifMd *md;
guint i;
const gchar *location;
@@ -1153,9 +1256,9 @@ zif_store_remote_clean (ZifStore *store, GCancellable *cancellable, ZifCompletio
/* setup completion with the correct number of steps */
if (remote->priv->loaded_metadata)
- zif_completion_set_number_steps (completion, 1+ZIF_REPO_MD_TYPE_UNKNOWN);
+ zif_completion_set_number_steps (completion, 1+ZIF_MD_TYPE_UNKNOWN);
else
- zif_completion_set_number_steps (completion, 2+ZIF_REPO_MD_TYPE_UNKNOWN);
+ zif_completion_set_number_steps (completion, 2+ZIF_MD_TYPE_UNKNOWN);
/* load metadata */
if (!remote->priv->loaded_metadata) {
@@ -1174,26 +1277,26 @@ zif_store_remote_clean (ZifStore *store, GCancellable *cancellable, ZifCompletio
}
/* set MD id and filename for each repo type */
- for (i=0; i<ZIF_REPO_MD_TYPE_UNKNOWN; i++) {
+ for (i=0; i<ZIF_MD_TYPE_UNKNOWN; i++) {
md = zif_store_remote_get_md_from_type (remote, i);
if (md == NULL) {
- /* TODO: until we've created ZifRepoMdComps and ZifRepoMdOther we'll get warnings here */
- egg_debug ("failed to get local store for %s with %s", zif_repo_md_type_to_text (i), remote->priv->id);
+ /* TODO: until we've created ZifMdComps and ZifMdOther we'll get warnings here */
+ egg_debug ("failed to get local store for %s with %s", zif_md_type_to_text (i), remote->priv->id);
goto skip;
}
/* location not set */
- location = zif_repo_md_get_location (md);
+ location = zif_md_get_location (md);
if (location == NULL) {
- egg_debug ("no location set for %s with %s", zif_repo_md_type_to_text (i), remote->priv->id);
+ egg_debug ("no location set for %s with %s", zif_md_type_to_text (i), remote->priv->id);
goto skip;
}
/* clean md */
- ret = zif_repo_md_clean (md, &error_local);
+ ret = zif_md_clean (md, &error_local);
if (!ret) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to clean %s: %s", zif_repo_md_type_to_text (i), error_local->message);
+ "failed to clean %s: %s", zif_md_type_to_text (i), error_local->message);
g_error_free (error_local);
goto out;
}
@@ -1237,7 +1340,7 @@ zif_store_remote_set_from_file (ZifStoreRemote *store, const gchar *repo_filenam
gboolean ret = TRUE;
guint i;
GError *error_local = NULL;
- ZifRepoMd *md;
+ ZifMd *md;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), FALSE);
g_return_val_if_fail (repo_filename != NULL, FALSE);
@@ -1264,11 +1367,11 @@ zif_store_remote_set_from_file (ZifStoreRemote *store, const gchar *repo_filenam
store->priv->repomd_filename = g_build_filename (store->priv->cache_dir, store->priv->id, "repomd.xml", NULL);
/* set MD id for each repo type */
- for (i=0; i<ZIF_REPO_MD_TYPE_UNKNOWN; i++) {
+ for (i=0; i<ZIF_MD_TYPE_UNKNOWN; i++) {
md = zif_store_remote_get_md_from_type (store, i);
if (md == NULL)
continue;
- zif_repo_md_set_id (md, store->priv->id);
+ zif_md_set_id (md, store->priv->id);
}
/* setup watch */
@@ -1417,7 +1520,7 @@ zif_store_remote_resolve (ZifStore *store, const gchar *search, GCancellable *ca
}
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_resolve (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), search, cancellable, completion_local, error);
+ array = zif_md_resolve (remote->priv->md_primary_db, search, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1436,6 +1539,7 @@ zif_store_remote_search_name (ZifStore *store, const gchar *search, GCancellable
GPtrArray *array = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
+ ZifMd *md;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
g_return_val_if_fail (remote->priv->id != NULL, NULL);
@@ -1470,7 +1574,8 @@ zif_store_remote_search_name (ZifStore *store, const gchar *search, GCancellable
}
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_search_name (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), search, cancellable, completion_local, error);
+ md = zif_store_remote_get_primary (remote);
+ array = zif_md_search_name (md, search, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1489,6 +1594,7 @@ zif_store_remote_search_details (ZifStore *store, const gchar *search, GCancella
GPtrArray *array = NULL;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
+ ZifMd *md;
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
g_return_val_if_fail (remote->priv->id != NULL, NULL);
@@ -1523,7 +1629,8 @@ zif_store_remote_search_details (ZifStore *store, const gchar *search, GCancella
}
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_search_details (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), search, cancellable, completion_local, error);
+ md = zif_store_remote_get_primary (remote);
+ array = zif_md_search_details (md, search, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1652,7 +1759,7 @@ zif_store_remote_search_category (ZifStore *store, const gchar *group_id, GCance
}
/* does this repo have comps data? */
- location = zif_repo_md_get_location (remote->priv->md_comps);
+ location = zif_md_get_location (remote->priv->md_comps);
if (location == NULL) {
/* empty array, as we want success */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
@@ -1661,7 +1768,7 @@ zif_store_remote_search_category (ZifStore *store, const gchar *group_id, GCance
/* get package names for group */
completion_local = zif_completion_get_child (completion);
- array_names = zif_repo_md_comps_get_packages_for_group (ZIF_REPO_MD_COMPS (remote->priv->md_comps),
+ array_names = zif_md_comps_get_packages_for_group (ZIF_MD_COMPS (remote->priv->md_comps),
group_id, cancellable, completion_local, &error_local);
if (array_names == NULL) {
/* ignore when group isn't present, TODO: use GError code */
@@ -1771,7 +1878,7 @@ zif_store_remote_search_group (ZifStore *store, const gchar *search, GCancellabl
}
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_search_group (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), search, cancellable, completion_local, error);
+ array = zif_md_search_group (remote->priv->md_primary_db, search, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1826,7 +1933,7 @@ zif_store_remote_find_package (ZifStore *store, const gchar *package_id, GCancel
/* search with predicate, TODO: search version (epoch+release) */
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_find_package (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), package_id, cancellable, completion_local, &error_local);
+ array = zif_md_find_package (remote->priv->md_primary_db, package_id, cancellable, completion_local, &error_local);
if (array == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to search: %s", error_local->message);
@@ -1903,7 +2010,7 @@ zif_store_remote_get_packages (ZifStore *store, GCancellable *cancellable, ZifCo
}
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_get_packages (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), cancellable, completion_local, error);
+ array = zif_md_get_packages (remote->priv->md_primary_db, cancellable, completion_local, error);
/* this section done */
zif_completion_done (completion);
@@ -1965,7 +2072,7 @@ zif_store_remote_get_categories (ZifStore *store, GCancellable *cancellable, Zif
}
/* does this repo have comps data? */
- location = zif_repo_md_get_location (remote->priv->md_comps);
+ location = zif_md_get_location (remote->priv->md_comps);
if (location == NULL) {
/* empty array, as we want success */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
@@ -1974,7 +2081,7 @@ zif_store_remote_get_categories (ZifStore *store, GCancellable *cancellable, Zif
/* get list of categories */
completion_local = zif_completion_get_child (completion);
- array_cats = zif_repo_md_comps_get_categories (ZIF_REPO_MD_COMPS (remote->priv->md_comps), cancellable, completion_local, &error_local);
+ array_cats = zif_md_comps_get_categories (ZIF_MD_COMPS (remote->priv->md_comps), cancellable, completion_local, &error_local);
if (array_cats == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to get categories: %s", error_local->message);
@@ -2002,7 +2109,7 @@ zif_store_remote_get_categories (ZifStore *store, GCancellable *cancellable, Zif
/* get the groups for this category */
completion_loop = zif_completion_get_child (completion_local);
- array_groups = zif_repo_md_comps_get_groups_for_category (ZIF_REPO_MD_COMPS (remote->priv->md_comps),
+ array_groups = zif_md_comps_get_groups_for_category (ZIF_MD_COMPS (remote->priv->md_comps),
pk_category_get_id (category), cancellable, completion_loop, &error_local);
if (array_groups == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -2042,58 +2149,13 @@ out:
}
/**
- * zif_store_remote_filter_newest:
- **/
-static void
-zif_store_remote_filter_newest (GPtrArray *packages)
-{
- guint i;
- GHashTable *hash;
- ZifPackage *package;
- ZifPackage *package_tmp;
- const gchar *name;
-
- /* use a hash so it's O(n) not O(n^2) */
- hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- for (i=0; i<packages->len; i++) {
- package = ZIF_PACKAGE (g_ptr_array_index (packages, i));
- name = zif_package_get_name (package);
- package_tmp = g_hash_table_lookup (hash, name);
-
- /* does not already exist */
- if (package_tmp == NULL) {
- g_hash_table_insert (hash, g_strdup (name), g_object_ref (package));
- continue;
- }
-
- /* the new package is older */
- if (zif_package_compare (package, package_tmp) < 0) {
- egg_debug ("%s is older than %s, so ignoring it",
- zif_package_get_id (package), zif_package_get_id (package_tmp));
- g_ptr_array_remove_index_fast (packages, i);
- continue;
- }
-
- egg_debug ("removing %s", zif_package_get_id (package_tmp));
- egg_debug ("adding %s", zif_package_get_id (package));
-
- /* remove the old one */
- g_hash_table_remove (hash, zif_package_get_name (package_tmp));
- g_hash_table_insert (hash, g_strdup (name), g_object_ref (package));
- g_ptr_array_remove_fast (packages, package_tmp);
- }
- g_hash_table_unref (hash);
-}
-
-/**
* zif_store_remote_get_updates:
**/
static GPtrArray *
-zif_store_remote_get_updates (ZifStore *store, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
- ZifStore *store_local;
- GPtrArray *packages;
GPtrArray *updates;
GPtrArray *array = NULL;
ZifPackage *package;
@@ -2118,9 +2180,9 @@ zif_store_remote_get_updates (ZifStore *store, GCancellable *cancellable, ZifCom
/* setup completion */
if (remote->priv->loaded_metadata)
- zif_completion_set_number_steps (completion, 2);
+ zif_completion_set_number_steps (completion, 1);
else
- zif_completion_set_number_steps (completion, 3);
+ zif_completion_set_number_steps (completion, 2);
/* load metadata */
if (!remote->priv->loaded_metadata) {
@@ -2137,28 +2199,11 @@ zif_store_remote_get_updates (ZifStore *store, GCancellable *cancellable, ZifCom
zif_completion_done (completion);
}
- /* get list of local packages */
- store_local = ZIF_STORE (zif_store_local_new ());
- completion_local = zif_completion_get_child (completion);
- packages = zif_store_get_packages (store_local, cancellable, completion_local, &error_local);
- if (packages == NULL) {
- g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to get local store: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- egg_debug ("searching with %i packages", packages->len);
-
- /* remove any packages that are not newest (think kernel) */
- zif_store_remote_filter_newest (packages);
-
- /* this section done */
- zif_completion_done (completion);
-
/* create array for packages to update */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
/* find each one in a remote repo */
+ egg_debug ("searching with %i packages", packages->len);
for (i=0; i<packages->len; i++) {
package = ZIF_PACKAGE (g_ptr_array_index (packages, i));
package_id = zif_package_get_id (package);
@@ -2166,13 +2211,17 @@ zif_store_remote_get_updates (ZifStore *store, GCancellable *cancellable, ZifCom
/* find package name in repo */
completion_local = zif_completion_get_child (completion);
split = pk_package_id_split (package_id);
- updates = zif_repo_md_primary_resolve (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), split[PK_PACKAGE_ID_NAME], cancellable, completion_local, NULL);
+ updates = zif_md_resolve (remote->priv->md_primary_db, split[PK_PACKAGE_ID_NAME],
+ cancellable, completion_local, NULL);
g_strfreev (split);
if (updates == NULL) {
egg_debug ("not found %s", split[PK_PACKAGE_ID_NAME]);
continue;
}
+ /* some repos contain lots of versions of one package */
+ zif_package_array_filter_newest (updates);
+
/* find updates */
for (j=0; j<updates->len; j++) {
update = ZIF_PACKAGE (g_ptr_array_index (updates, j));
@@ -2194,9 +2243,6 @@ zif_store_remote_get_updates (ZifStore *store, GCancellable *cancellable, ZifCom
/* this section done */
zif_completion_done (completion);
-
- g_ptr_array_unref (packages);
- g_object_unref (store_local);
out:
return array;
}
@@ -2245,7 +2291,7 @@ zif_store_remote_what_provides (ZifStore *store, const gchar *search,
/* get details */
completion_local = zif_completion_get_child (completion);
- array = zif_repo_md_primary_what_provides (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), search,
+ array = zif_md_what_provides (remote->priv->md_primary_db, search,
cancellable, completion_local, error);
/* this section done */
@@ -2302,7 +2348,7 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
/* gets a list of pkgId's that match this file */
completion_local = zif_completion_get_child (completion);
- pkgids = zif_repo_md_filelists_search_file (ZIF_REPO_MD_FILELISTS (remote->priv->md_filelists), search, cancellable, completion_local, &error_local);
+ pkgids = zif_md_filelists_search_file (ZIF_MD_FILELISTS (remote->priv->md_filelists), search, cancellable, completion_local, &error_local);
if (pkgids == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to load get list of pkgids: %s", error_local->message);
@@ -2320,7 +2366,7 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
/* get the results (should just be one) */
completion_local = zif_completion_get_child (completion);
- tmp = zif_repo_md_primary_search_pkgid (ZIF_REPO_MD_PRIMARY (remote->priv->md_primary), pkgid, cancellable, completion_local, &error_local);
+ tmp = zif_md_search_pkgid (remote->priv->md_primary_db, pkgid, cancellable, completion_local, &error_local);
if (tmp == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED_TO_FIND,
"failed to resolve pkgId to package: %s", error_local->message);
@@ -2560,9 +2606,11 @@ zif_store_remote_finalize (GObject *object)
g_free (store->priv->repomd_filename);
g_free (store->priv->directory);
- g_object_unref (store->priv->md_primary);
+ g_object_unref (store->priv->md_primary_db);
+ g_object_unref (store->priv->md_primary_xml);
g_object_unref (store->priv->md_filelists);
g_object_unref (store->priv->md_comps);
+ g_object_unref (store->priv->md_updateinfo);
g_object_unref (store->priv->md_metalink);
g_object_unref (store->priv->md_mirrorlist);
g_object_unref (store->priv->config);
@@ -2614,7 +2662,7 @@ zif_store_remote_init (ZifStoreRemote *store)
gchar *cache_dir = NULL;
guint i;
GError *error = NULL;
- ZifRepoMd *md;
+ ZifMd *md;
store->priv = ZIF_STORE_REMOTE_GET_PRIVATE (store);
store->priv->loaded = FALSE;
@@ -2631,12 +2679,14 @@ zif_store_remote_init (ZifStoreRemote *store)
store->priv->config = zif_config_new ();
store->priv->monitor = zif_monitor_new ();
store->priv->lock = zif_lock_new ();
- store->priv->md_filelists = ZIF_REPO_MD (zif_repo_md_filelists_new ());
- store->priv->md_primary = ZIF_REPO_MD (zif_repo_md_primary_new ());
- store->priv->md_metalink = ZIF_REPO_MD (zif_repo_md_metalink_new ());
- store->priv->md_mirrorlist = ZIF_REPO_MD (zif_repo_md_mirrorlist_new ());
- store->priv->md_comps = ZIF_REPO_MD (zif_repo_md_comps_new ());
- store->priv->parser_type = ZIF_REPO_MD_TYPE_UNKNOWN;
+ store->priv->md_filelists = ZIF_MD (zif_md_filelists_new ());
+ store->priv->md_primary_db = ZIF_MD (zif_md_primary_sql_new ());
+ store->priv->md_primary_xml = ZIF_MD (zif_md_primary_xml_new ());
+ store->priv->md_metalink = ZIF_MD (zif_md_metalink_new ());
+ store->priv->md_mirrorlist = ZIF_MD (zif_md_mirrorlist_new ());
+ store->priv->md_comps = ZIF_MD (zif_md_comps_new ());
+ store->priv->md_updateinfo = ZIF_MD (zif_md_updateinfo_new ());
+ store->priv->parser_type = ZIF_MD_TYPE_UNKNOWN;
store->priv->parser_section = ZIF_STORE_REMOTE_PARSER_SECTION_UNKNOWN;
g_signal_connect (store->priv->monitor, "changed", G_CALLBACK (zif_store_remote_file_monitor_cb), store);
@@ -2657,16 +2707,16 @@ zif_store_remote_init (ZifStoreRemote *store)
}
/* set MD type on each repo */
- for (i=0; i<ZIF_REPO_MD_TYPE_UNKNOWN; i++) {
+ for (i=0; i<ZIF_MD_TYPE_UNKNOWN; i++) {
md = zif_store_remote_get_md_from_type (store, i);
if (md == NULL)
continue;
/* set parent reference */
- zif_repo_md_set_store_remote (md, store);
+ zif_md_set_store_remote (md, store);
/* set MD type */
- zif_repo_md_set_mdtype (md, i);
+ zif_md_set_mdtype (md, i);
}
out:
g_free (cache_dir);
@@ -2700,6 +2750,7 @@ zif_store_remote_test (EggTest *test)
ZifGroups *groups;
ZifStoreRemote *store;
ZifStoreLocal *store_local;
+ GPtrArray *packages;
ZifConfig *config;
ZifLock *lock;
ZifCompletion *completion;
@@ -2753,7 +2804,12 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get updates");
zif_completion_reset (completion);
- array = zif_store_remote_get_updates (ZIF_STORE (store), NULL, completion, &error);
+ packages = zif_store_get_packages (ZIF_STORE (store_local), NULL, completion, &error);
+ if (packages == NULL)
+ egg_test_failed (test, "failed to get local store: %s", error->message);
+ zif_package_array_filter_newest (packages);
+ zif_completion_reset (completion);
+ array = zif_store_remote_get_updates (ZIF_STORE (store), packages, NULL, completion, &error);
if (array == NULL)
egg_test_failed (test, "no data: %s", error->message);
else if (array->len > 0)
@@ -2761,6 +2817,7 @@ zif_store_remote_test (EggTest *test)
else
egg_test_success (test, "no updates"); //TODO: failure
g_ptr_array_unref (array);
+ g_ptr_array_unref (packages);
/************************************************************/
egg_test_title (test, "is devel");
diff --git a/backends/yum/libzif/zif-store-remote.h b/backends/yum/libzif/zif-store-remote.h
index fe236d8..e6d95de 100644
--- a/backends/yum/libzif/zif-store-remote.h
+++ b/backends/yum/libzif/zif-store-remote.h
@@ -31,6 +31,7 @@
#include "zif-store.h"
#include "zif-package.h"
+#include "zif-update.h"
G_BEGIN_DECLS
@@ -85,6 +86,11 @@ gboolean zif_store_remote_download (ZifStoreRemote *store,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+ZifUpdate *zif_store_remote_get_update_detail (ZifStoreRemote *store,
+ const gchar *package_id,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
gboolean zif_store_remote_check (ZifStoreRemote *store,
GCancellable *cancellable,
ZifCompletion *completion,
diff --git a/backends/yum/libzif/zif-store.c b/backends/yum/libzif/zif-store.c
index efba57d..fe8b704 100644
--- a/backends/yum/libzif/zif-store.c
+++ b/backends/yum/libzif/zif-store.c
@@ -415,6 +415,7 @@ zif_store_get_packages (ZifStore *store, GCancellable *cancellable, ZifCompletio
/**
* zif_store_get_updates:
* @store: the #ZifStore object
+ * @packages: an array of #ZifPackage's
* @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
* @completion: a #ZifCompletion to use for progress reporting
* @error: a #GError which is used on failure, or %NULL
@@ -426,12 +427,14 @@ zif_store_get_packages (ZifStore *store, GCancellable *cancellable, ZifCompletio
* Since: 0.0.1
**/
GPtrArray *
-zif_store_get_updates (ZifStore *store, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_get_updates (ZifStore *store, GPtrArray *packages,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
g_return_val_if_fail (ZIF_IS_STORE (store), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ g_return_val_if_fail (packages != NULL, NULL);
/* no support */
if (klass->get_updates == NULL) {
@@ -440,7 +443,7 @@ zif_store_get_updates (ZifStore *store, GCancellable *cancellable, ZifCompletion
return NULL;
}
- return klass->get_updates (store, cancellable, completion, error);
+ return klass->get_updates (store, packages, cancellable, completion, error);
}
/**
diff --git a/backends/yum/libzif/zif-store.h b/backends/yum/libzif/zif-store.h
index 83b1a25..a0bf212 100644
--- a/backends/yum/libzif/zif-store.h
+++ b/backends/yum/libzif/zif-store.h
@@ -110,6 +110,7 @@ struct _ZifStoreClass
ZifCompletion *completion,
GError **error);
GPtrArray *(*get_updates) (ZifStore *store,
+ GPtrArray *packages,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
@@ -194,6 +195,7 @@ GPtrArray *zif_store_get_packages (ZifStore *store,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_get_updates (ZifStore *store,
+ GPtrArray *packages,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index daef16a..bcbd6f3 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -1433,6 +1433,7 @@ backend_get_updates_thread (PkBackend *backend)
ZifCompletion *completion_local;
GPtrArray *array = NULL;
GPtrArray *result = NULL;
+ GPtrArray *packages = NULL;
gboolean ret;
GError *error = NULL;
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -1449,7 +1450,7 @@ backend_get_updates_thread (PkBackend *backend)
/* setup completion */
zif_completion_reset (priv->completion);
- zif_completion_set_number_steps (priv->completion, 2);
+ zif_completion_set_number_steps (priv->completion, 4);
/* get a store_array of remote stores */
store_array = zif_store_array_new ();
@@ -1464,9 +1465,28 @@ backend_get_updates_thread (PkBackend *backend)
/* this section done */
zif_completion_done (priv->completion);
+ /* get all the installed packages */
+ completion_local = zif_completion_get_child (priv->completion);
+ packages = zif_store_get_packages (ZIF_STORE (priv->store_local), NULL, completion_local, &error);
+ if (packages == NULL) {
+ g_print ("failed to get local store: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+ egg_debug ("searching for updates with %i packages", packages->len);
+
+ /* this section done */
+ zif_completion_done (priv->completion);
+
+ /* remove any packages that are not newest (think kernel) */
+ zif_package_array_filter_newest (packages);
+
+ /* this section done */
+ zif_completion_done (priv->completion);
+
/* get updates */
completion_local = zif_completion_get_child (priv->completion);
- array = zif_store_array_get_updates (store_array, (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ array = zif_store_array_get_updates (store_array, packages, (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
priv->cancellable, completion_local, &error);
if (array == NULL) {
pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to get updates: %s\n", error->message);
@@ -1489,6 +1509,8 @@ backend_get_updates_thread (PkBackend *backend)
out:
backend_unlock (backend);
pk_backend_finished (backend);
+ if (packages != NULL)
+ g_ptr_array_unref (packages);
if (array != NULL)
g_ptr_array_unref (array);
if (result != NULL)
commit 9d659a43d888c481964611c7af6182f3e5c88319
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 13:19:23 2010 +0100
trivial: update to the latest snapshot of libzif to support legacy primary metadata
diff --git a/backends/yum/libzif/zif-md-comps.c b/backends/yum/libzif/zif-md-comps.c
new file mode 100644
index 0000000..29803ff
--- /dev/null
+++ b/backends/yum/libzif/zif-md-comps.c
@@ -0,0 +1,960 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-comps
+ * @short_description: Comps metadata functionality
+ *
+ * Provide access to the comps repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <glib.h>
+
+#include "zif-md.h"
+#include "zif-md-comps.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_COMPS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_COMPS, ZifMdCompsPrivate))
+
+typedef enum {
+ ZIF_MD_COMPS_SECTION_GROUP,
+ ZIF_MD_COMPS_SECTION_CATEGORY,
+ ZIF_MD_COMPS_SECTION_UNKNOWN
+} ZifMdCompsSection;
+
+typedef enum {
+ ZIF_MD_COMPS_SECTION_GROUP_ID,
+ ZIF_MD_COMPS_SECTION_GROUP_NAME,
+ ZIF_MD_COMPS_SECTION_GROUP_DESCRIPTION,
+ ZIF_MD_COMPS_SECTION_GROUP_VISIBLE,
+ ZIF_MD_COMPS_SECTION_GROUP_PACKAGELIST,
+ ZIF_MD_COMPS_SECTION_GROUP_PACKAGE,
+ ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN
+} ZifMdCompsSectionGroup;
+
+typedef enum {
+ ZIF_MD_COMPS_SECTION_GROUP_TYPE_DEFAULT,
+ ZIF_MD_COMPS_SECTION_GROUP_TYPE_OPTIONAL,
+ ZIF_MD_COMPS_SECTION_GROUP_TYPE_CONDITIONAL,
+ ZIF_MD_COMPS_SECTION_GROUP_TYPE_UNKNOWN
+} ZifMdCompsSectionGroupType;
+
+typedef enum {
+ ZIF_MD_COMPS_SECTION_CATEGORY_ID,
+ ZIF_MD_COMPS_SECTION_CATEGORY_NAME,
+ ZIF_MD_COMPS_SECTION_CATEGORY_DESCRIPTION,
+ ZIF_MD_COMPS_SECTION_CATEGORY_GROUPLIST,
+ ZIF_MD_COMPS_SECTION_CATEGORY_GROUP,
+ ZIF_MD_COMPS_SECTION_CATEGORY_UNKNOWN
+} ZifMdCompsSectionCategory;
+
+typedef struct {
+ gchar *id;
+ gchar *name;
+ gchar *description;
+ gboolean visible;
+ GPtrArray *packagelist; /* stored as gchar */
+} ZifMdCompsGroupData;
+
+typedef struct {
+ gchar *id;
+ gchar *name;
+ gchar *description;
+ GPtrArray *grouplist; /* stored as gchar */
+} ZifMdCompsCategoryData;
+
+/**
+ * ZifMdCompsPrivate:
+ *
+ * Private #ZifMdComps data
+ **/
+struct _ZifMdCompsPrivate
+{
+ gboolean loaded;
+ GPtrArray *array_groups; /* stored as ZifMdCompsGroupData */
+ GPtrArray *array_categories; /* stored as ZifMdCompsCategoryData */
+ /* for parser */
+ ZifMdCompsSection section;
+ ZifMdCompsSectionGroup section_group;
+ ZifMdCompsSectionGroupType section_group_type;
+ ZifMdCompsSectionCategory section_category;
+ ZifMdCompsGroupData *group_data_temp;
+ ZifMdCompsCategoryData *category_data_temp;
+};
+
+G_DEFINE_TYPE (ZifMdComps, zif_md_comps, ZIF_TYPE_MD)
+
+/**
+ * zif_md_comps_group_data_new:
+ **/
+static ZifMdCompsGroupData *
+zif_md_comps_group_data_new (void)
+{
+ ZifMdCompsGroupData *data;
+ data = g_new0 (ZifMdCompsGroupData, 1);
+ data->packagelist = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ return data;
+}
+
+/**
+ * zif_md_comps_category_data_new:
+ **/
+static ZifMdCompsCategoryData *
+zif_md_comps_category_data_new (void)
+{
+ ZifMdCompsCategoryData *data;
+ data = g_new0 (ZifMdCompsCategoryData, 1);
+ data->grouplist = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ return data;
+}
+
+/**
+ * zif_md_comps_group_data_free:
+ **/
+static void
+zif_md_comps_group_data_free (ZifMdCompsGroupData *data)
+{
+ g_free (data->id);
+ g_free (data->name);
+ g_free (data->description);
+ g_ptr_array_unref (data->packagelist);
+ g_free (data);
+}
+
+/**
+ * zif_md_comps_category_data_free:
+ **/
+static void
+zif_md_comps_category_data_free (ZifMdCompsCategoryData *data)
+{
+ g_free (data->id);
+ g_free (data->name);
+ g_free (data->description);
+ g_ptr_array_unref (data->grouplist);
+ g_free (data);
+}
+
+/**
+ * zif_md_comps_parser_start_element:
+ **/
+static void
+zif_md_comps_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
+{
+ guint i;
+ ZifMdComps *comps = user_data;
+
+ g_return_if_fail (ZIF_IS_MD_COMPS (comps));
+
+ /* group element */
+ if (comps->priv->section == ZIF_MD_COMPS_SECTION_UNKNOWN) {
+
+ /* start of group */
+ if (g_strcmp0 (element_name, "group") == 0) {
+ comps->priv->section = ZIF_MD_COMPS_SECTION_GROUP;
+ comps->priv->group_data_temp = zif_md_comps_group_data_new ();
+ goto out;
+ }
+
+ /* start of category */
+ if (g_strcmp0 (element_name, "category") == 0) {
+ comps->priv->section = ZIF_MD_COMPS_SECTION_CATEGORY;
+ comps->priv->category_data_temp = zif_md_comps_category_data_new ();
+ goto out;
+ }
+
+ goto out;
+ }
+
+ /* group element */
+ if (comps->priv->section == ZIF_MD_COMPS_SECTION_GROUP) {
+ /* id */
+ if (g_strcmp0 (element_name, "id") == 0) {
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_ID;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "name") == 0) {
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_NAME;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "description") == 0) {
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_DESCRIPTION;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "uservisible") == 0) {
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_VISIBLE;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "packagelist") == 0) {
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_PACKAGELIST;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "packagereq") == 0) {
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_PACKAGE;
+
+ /* find the package type as a bonus */
+ comps->priv->section_group_type = ZIF_MD_COMPS_SECTION_GROUP_TYPE_UNKNOWN;
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (element_name, "type") == 0) {
+ if (g_strcmp0 (attribute_values[i], "default"))
+ comps->priv->section_group_type = ZIF_MD_COMPS_SECTION_GROUP_TYPE_DEFAULT;
+ break;
+ }
+ }
+ goto out;
+ }
+ }
+
+ /* category element */
+ if (comps->priv->section == ZIF_MD_COMPS_SECTION_CATEGORY) {
+ /* id */
+ if (g_strcmp0 (element_name, "id") == 0) {
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_ID;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "name") == 0) {
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_NAME;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "description") == 0) {
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_DESCRIPTION;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "grouplist") == 0) {
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_GROUPLIST;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "groupid") == 0) {
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_GROUP;
+ goto out;
+ }
+ }
+out:
+ return;
+}
+
+/**
+ * zif_md_comps_parser_end_element:
+ **/
+static void
+zif_md_comps_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
+ gpointer user_data, GError **error)
+{
+ ZifMdComps *comps = user_data;
+
+ /* end of group */
+ if (g_strcmp0 (element_name, "group") == 0) {
+ comps->priv->section = ZIF_MD_COMPS_SECTION_UNKNOWN;
+
+ /* add to array */
+ g_ptr_array_add (comps->priv->array_groups, comps->priv->group_data_temp);
+
+ if (FALSE)
+ egg_debug ("added GROUP '%s' name:%s, desc:%s, visible:%i, list=%p",
+ comps->priv->group_data_temp->id,
+ comps->priv->group_data_temp->name,
+ comps->priv->group_data_temp->description,
+ comps->priv->group_data_temp->visible,
+ comps->priv->group_data_temp->packagelist);
+
+ comps->priv->group_data_temp = NULL;
+ goto out;
+ }
+
+ /* start of group */
+ if (g_strcmp0 (element_name, "category") == 0) {
+ comps->priv->section = ZIF_MD_COMPS_SECTION_UNKNOWN;
+
+ /* add to array */
+ g_ptr_array_add (comps->priv->array_categories, comps->priv->category_data_temp);
+
+ if (FALSE)
+ egg_debug ("added CATEGORY '%s' name:%s, desc:%s, list=%p",
+ comps->priv->category_data_temp->id,
+ comps->priv->category_data_temp->name,
+ comps->priv->category_data_temp->description,
+ comps->priv->category_data_temp->grouplist);
+
+ comps->priv->category_data_temp = NULL;
+ goto out;
+ }
+out:
+ return;
+}
+
+/**
+ * zif_md_comps_parser_text:
+ **/
+static void
+zif_md_comps_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
+ gpointer user_data, GError **error)
+
+{
+ ZifMdComps *comps = user_data;
+
+ /* skip whitespace */
+ if (text_len < 1 || text[0] == ' ' || text[0] == '\t' || text[0] == '\n')
+ goto out;
+
+ /* group section */
+ if (comps->priv->section == ZIF_MD_COMPS_SECTION_GROUP) {
+ if (comps->priv->section_group == ZIF_MD_COMPS_SECTION_GROUP_ID) {
+ comps->priv->group_data_temp->id = g_strdup (text);
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_group == ZIF_MD_COMPS_SECTION_GROUP_NAME) {
+ /* ignore translated versions for now */
+ if (comps->priv->group_data_temp->name != NULL)
+ goto out;
+ comps->priv->group_data_temp->name = g_strdup (text);
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_group == ZIF_MD_COMPS_SECTION_GROUP_DESCRIPTION) {
+ /* ignore translated versions for now */
+ if (comps->priv->group_data_temp->description != NULL)
+ goto out;
+ comps->priv->group_data_temp->description = g_strdup (text);
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_group == ZIF_MD_COMPS_SECTION_GROUP_VISIBLE) {
+ /* TODO: parse true and false */
+ comps->priv->group_data_temp->visible = atoi (text);
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_group == ZIF_MD_COMPS_SECTION_GROUP_PACKAGE) {
+ g_ptr_array_add (comps->priv->group_data_temp->packagelist, g_strdup (text));
+ comps->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN;
+ goto out;
+ }
+ goto out;
+ }
+
+ /* category section */
+ if (comps->priv->section == ZIF_MD_COMPS_SECTION_CATEGORY) {
+ if (comps->priv->section_category == ZIF_MD_COMPS_SECTION_CATEGORY_ID) {
+ comps->priv->category_data_temp->id = g_strdup (text);
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_category == ZIF_MD_COMPS_SECTION_CATEGORY_NAME) {
+ /* ignore translated versions for now */
+ if (comps->priv->category_data_temp->name != NULL)
+ goto out;
+ comps->priv->category_data_temp->name = g_strdup (text);
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_category == ZIF_MD_COMPS_SECTION_CATEGORY_DESCRIPTION) {
+ /* ignore translated versions for now */
+ if (comps->priv->category_data_temp->description != NULL)
+ goto out;
+ comps->priv->category_data_temp->description = g_strdup (text);
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
+ goto out;
+ }
+ if (comps->priv->section_category == ZIF_MD_COMPS_SECTION_CATEGORY_GROUP) {
+ g_ptr_array_add (comps->priv->category_data_temp->grouplist, g_strdup (text));
+ comps->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
+ goto out;
+ }
+ goto out;
+ }
+out:
+ return;
+}
+
+/**
+ * zif_md_comps_unload:
+ **/
+static gboolean
+zif_md_comps_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_comps_load:
+ **/
+static gboolean
+zif_md_comps_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = TRUE;
+ gchar *contents = NULL;
+ const gchar *filename;
+ gsize size;
+ GMarkupParseContext *context = NULL;
+ const GMarkupParser gpk_md_comps_markup_parser = {
+ zif_md_comps_parser_start_element,
+ zif_md_comps_parser_end_element,
+ zif_md_comps_parser_text,
+ NULL, /* passthrough */
+ NULL /* error */
+ };
+ ZifMdComps *comps = ZIF_MD_COMPS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_COMPS (md), FALSE);
+
+ /* already loaded */
+ if (comps->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for comps");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+
+ /* get repo contents */
+ ret = g_file_get_contents (filename, &contents, &size, error);
+ if (!ret)
+ goto out;
+
+ /* create parser */
+ context = g_markup_parse_context_new (&gpk_md_comps_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, comps, NULL);
+
+ /* parse data */
+ ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
+ if (!ret)
+ goto out;
+
+ comps->priv->loaded = TRUE;
+out:
+ if (context != NULL)
+ g_markup_parse_context_free (context);
+ g_free (contents);
+ return ret;
+}
+
+/**
+ * zif_md_comps_category_set_icon:
+ *
+ * Check the icon exists, otherwise fallback to the parent ID, and then
+ * something sane.
+ **/
+static void
+zif_md_comps_category_set_icon (PkCategory *category)
+{
+ const gchar *icon;
+ GString *filename = g_string_new ("");
+
+ /* try the proper group icon */
+ icon = pk_category_get_id (category);
+ g_string_printf (filename, "/usr/share/pixmaps/comps/%s.png", icon);
+ if (g_file_test (filename->str, G_FILE_TEST_EXISTS))
+ goto out;
+
+ /* fall back to parent icon */
+ icon = pk_category_get_parent_id (category);
+ g_string_printf (filename, "/usr/share/pixmaps/comps/%s.png", icon);
+ if (g_file_test (filename->str, G_FILE_TEST_EXISTS))
+ goto out;
+
+ /* fall back to the missing icon */
+ icon = "image-missing";
+out:
+ pk_category_set_icon (category, icon);
+ g_string_free (filename, TRUE);
+}
+
+/**
+ * zif_md_comps_get_categories:
+ * @md: the #ZifMdComps object
+ * @cancellable: the %GCancellable, or %NULL
+ * @completion: the %ZifCompletion object
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the available list of categories.
+ *
+ * Return value: %PkCategory array of categories, with parent_id set to %NULL
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_comps_get_categories (ZifMdComps *md, GCancellable *cancellable,
+ ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ guint i;
+ guint len;
+ gboolean ret;
+ GError *error_local = NULL;
+ const ZifMdCompsCategoryData *data;
+ PkCategory *category;
+
+ g_return_val_if_fail (ZIF_IS_MD_COMPS (md), NULL);
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get load comps: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get categories */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ len = md->priv->array_categories->len;
+ for (i=0; i<len; i++) {
+ data = g_ptr_array_index (md->priv->array_categories, i);
+ category = pk_category_new ();
+ pk_category_set_id (category, data->id);
+ pk_category_set_name (category, data->name);
+ pk_category_set_summary (category, data->description);
+ zif_md_comps_category_set_icon (category);
+ g_ptr_array_add (array, category);
+ }
+out:
+ return array;
+}
+
+/**
+ * zif_md_comps_get_category_for_group:
+ **/
+static PkCategory *
+zif_md_comps_get_category_for_group (ZifMdComps *md, const gchar *group_id)
+{
+ guint i;
+ guint len;
+ PkCategory *category = NULL;
+ ZifMdCompsGroupData *data;
+
+ /* find group matching group_id */
+ len = md->priv->array_groups->len;
+ for (i=0; i<len; i++) {
+ data = g_ptr_array_index (md->priv->array_groups, i);
+ if (g_strcmp0 (group_id, data->id) == 0) {
+ category = pk_category_new ();
+ pk_category_set_id (category, data->id);
+ pk_category_set_name (category, data->name);
+ pk_category_set_summary (category, data->description);
+ break;
+ }
+ }
+ return category;
+}
+
+/**
+ * zif_md_comps_get_groups_for_category:
+ * @md: the #ZifMdComps object
+ * @category_id: the category to search for
+ * @cancellable: the %GCancellable, or %NULL
+ * @completion: the %ZifCompletion object
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the list of groups for a specific category.
+ *
+ * Return value: %PkCategory array of groups
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_comps_get_groups_for_category (ZifMdComps *md, const gchar *category_id,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ guint i;
+ guint j;
+ guint len;
+ gboolean ret;
+ GError *error_local = NULL;
+ const ZifMdCompsCategoryData *data;
+ const gchar *id;
+ PkCategory *category;
+
+ g_return_val_if_fail (ZIF_IS_MD_COMPS (md), NULL);
+ g_return_val_if_fail (category_id != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get load comps: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get categories */
+ len = md->priv->array_categories->len;
+ for (i=0; i<len; i++) {
+ data = g_ptr_array_index (md->priv->array_categories, i);
+
+ /* category matches */
+ if (g_strcmp0 (category_id, data->id) == 0) {
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ for (j=0; j<data->grouplist->len; j++) {
+ id = g_ptr_array_index (data->grouplist, j);
+ /* find group matching group_id */
+ category = zif_md_comps_get_category_for_group (md, id);
+ if (category == NULL)
+ continue;
+
+ /* add */
+ pk_category_set_parent_id (category, category_id);
+ zif_md_comps_category_set_icon (category);
+ g_ptr_array_add (array, category);
+ }
+ break;
+ }
+ }
+
+ /* nothing found */
+ if (array == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "could not find category: %s", category_id);
+ }
+out:
+ return array;
+}
+
+/**
+ * zif_md_comps_get_packages_for_group:
+ * @md: the #ZifMdComps object
+ * @group_id: the group to search for
+ * @cancellable: the %GCancellable, or %NULL
+ * @completion: the %ZifCompletion object
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the package names for a group.
+ *
+ * Return value: gchar pointer array of package names (not %ZifPackage's)
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_comps_get_packages_for_group (ZifMdComps *md, const gchar *group_id,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ guint i;
+ guint j;
+ guint len;
+ gboolean ret;
+ GError *error_local = NULL;
+ const ZifMdCompsGroupData *data;
+ const gchar *packagename;
+
+ g_return_val_if_fail (ZIF_IS_MD_COMPS (md), NULL);
+ g_return_val_if_fail (group_id != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get load comps: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get packages in this group */
+ len = md->priv->array_groups->len;
+ for (i=0; i<len; i++) {
+ data = g_ptr_array_index (md->priv->array_groups, i);
+
+ /* category matches */
+ if (g_strcmp0 (group_id, data->id) == 0) {
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ for (j=0; j<data->packagelist->len; j++) {
+ packagename = g_ptr_array_index (data->packagelist, j);
+ g_ptr_array_add (array, g_strdup (packagename));
+ }
+ break;
+ }
+ }
+
+ /* nothing found */
+ if (array == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "could not find group: %s", group_id);
+ }
+out:
+ return array;
+}
+
+/**
+ * zif_md_comps_finalize:
+ **/
+static void
+zif_md_comps_finalize (GObject *object)
+{
+ ZifMdComps *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_COMPS (object));
+ md = ZIF_MD_COMPS (object);
+
+ g_ptr_array_unref (md->priv->array_groups);
+ g_ptr_array_unref (md->priv->array_categories);
+
+ G_OBJECT_CLASS (zif_md_comps_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_comps_class_init:
+ **/
+static void
+zif_md_comps_class_init (ZifMdCompsClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_comps_finalize;
+
+ /* map */
+ md_class->load = zif_md_comps_load;
+ md_class->unload = zif_md_comps_unload;
+ g_type_class_add_private (klass, sizeof (ZifMdCompsPrivate));
+}
+
+/**
+ * zif_md_comps_init:
+ **/
+static void
+zif_md_comps_init (ZifMdComps *md)
+{
+ md->priv = ZIF_MD_COMPS_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->section = ZIF_MD_COMPS_SECTION_UNKNOWN;
+ md->priv->section_group = ZIF_MD_COMPS_SECTION_GROUP_UNKNOWN;
+ md->priv->section_group_type = ZIF_MD_COMPS_SECTION_GROUP_TYPE_UNKNOWN;
+ md->priv->section_category = ZIF_MD_COMPS_SECTION_CATEGORY_UNKNOWN;
+ md->priv->group_data_temp = NULL;
+ md->priv->category_data_temp = NULL;
+ md->priv->array_groups = g_ptr_array_new_with_free_func ((GDestroyNotify) zif_md_comps_group_data_free);
+ md->priv->array_categories = g_ptr_array_new_with_free_func ((GDestroyNotify) zif_md_comps_category_data_free);
+}
+
+/**
+ * zif_md_comps_new:
+ *
+ * Return value: A new #ZifMdComps class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdComps *
+zif_md_comps_new (void)
+{
+ ZifMdComps *md;
+ md = g_object_new (ZIF_TYPE_MD_COMPS, NULL);
+ return ZIF_MD_COMPS (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_comps_test (EggTest *test)
+{
+ ZifMdComps *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ const gchar *id;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ PkCategory *category;
+
+ if (!egg_test_start (test, "ZifMdComps"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get md_comps md");
+ md = zif_md_comps_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_COMPS);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/comps-rawhide.xml");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "14f17b894303b4dc9683511104848f75d98cea8f76c107bf25e1b4db5741f6a8");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "get categories");
+ array = zif_md_comps_get_categories (md, cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get categories '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len == 1)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "incorrect value %i", array->len);
+
+ /************************************************************/
+ egg_test_title (test, "correct id value");
+ category = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (pk_category_get_id (category), "apps") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct id '%s'", pk_category_get_id (category));
+
+ /************************************************************/
+ egg_test_title (test, "correct name value");
+ category = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (pk_category_get_name (category), "Applications") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct name '%s'", pk_category_get_name (category));
+
+ /************************************************************/
+ egg_test_title (test, "correct summary value");
+ category = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (pk_category_get_summary (category), "Applications to perform a variety of tasks") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct summary '%s'", pk_category_get_summary (category));
+
+ g_ptr_array_unref (array);
+
+ /************************************************************/
+ egg_test_title (test, "get groups for category");
+ array = zif_md_comps_get_groups_for_category (md, "apps", cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get categories '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len == 2)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "incorrect value %i", array->len);
+
+ /************************************************************/
+ egg_test_title (test, "correct id value");
+ category = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (pk_category_get_id (category), "admin-tools") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct id '%s'", pk_category_get_id (category));
+ g_ptr_array_unref (array);
+
+ /************************************************************/
+ egg_test_title (test, "get packages for group");
+ array = zif_md_comps_get_packages_for_group (md, "admin-tools", cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get categories '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len == 2)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "incorrect value %i", array->len);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ id = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (id, "gnome-packagekit") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct id '%s'", id);
+ g_ptr_array_unref (array);
+
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-comps.h b/backends/yum/libzif/zif-md-comps.h
new file mode 100644
index 0000000..2ae15a4
--- /dev/null
+++ b/backends/yum/libzif/zif-md-comps.h
@@ -0,0 +1,78 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_COMPS_H
+#define __ZIF_MD_COMPS_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_COMPS (zif_md_comps_get_type ())
+#define ZIF_MD_COMPS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_COMPS, ZifMdComps))
+#define ZIF_MD_COMPS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_COMPS, ZifMdCompsClass))
+#define ZIF_IS_MD_COMPS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_COMPS))
+#define ZIF_IS_MD_COMPS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_COMPS))
+#define ZIF_MD_COMPS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_COMPS, ZifMdCompsClass))
+
+typedef struct _ZifMdComps ZifMdComps;
+typedef struct _ZifMdCompsPrivate ZifMdCompsPrivate;
+typedef struct _ZifMdCompsClass ZifMdCompsClass;
+
+struct _ZifMdComps
+{
+ ZifMd parent;
+ ZifMdCompsPrivate *priv;
+};
+
+struct _ZifMdCompsClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_comps_get_type (void);
+ZifMdComps *zif_md_comps_new (void);
+
+GPtrArray *zif_md_comps_get_categories (ZifMdComps *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_comps_get_groups_for_category (ZifMdComps *md,
+ const gchar *category_id,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_comps_get_packages_for_group (ZifMdComps *md,
+ const gchar *group_id,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_COMPS_H */
+
diff --git a/backends/yum/libzif/zif-md-filelists.c b/backends/yum/libzif/zif-md-filelists.c
new file mode 100644
index 0000000..46140df
--- /dev/null
+++ b/backends/yum/libzif/zif-md-filelists.c
@@ -0,0 +1,450 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-filelists
+ * @short_description: File list metadata functionality
+ *
+ * Provide access to the file list metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sqlite3.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-md-filelists.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_FILELISTS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_FILELISTS, ZifMdFilelistsPrivate))
+
+/**
+ * ZifMdFilelistsPrivate:
+ *
+ * Private #ZifMdFilelists data
+ **/
+struct _ZifMdFilelistsPrivate
+{
+ gboolean loaded;
+ sqlite3 *db;
+};
+
+typedef struct {
+ gchar *filename;
+ GPtrArray *array;
+} ZifMdFilelistsData;
+
+G_DEFINE_TYPE (ZifMdFilelists, zif_md_filelists, ZIF_TYPE_MD)
+
+/**
+ * zif_md_filelists_unload:
+ **/
+static gboolean
+zif_md_filelists_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_filelists_load:
+ **/
+static gboolean
+zif_md_filelists_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ const gchar *filename;
+ gint rc;
+ ZifMdFilelists *filelists = ZIF_MD_FILELISTS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS (md), FALSE);
+
+ /* already loaded */
+ if (filelists->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for filelists");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+ rc = sqlite3_open (filename, &filelists->priv->db);
+ if (rc != 0) {
+ egg_warning ("Can't open database: %s\n", sqlite3_errmsg (filelists->priv->db));
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "can't open database: %s", sqlite3_errmsg (filelists->priv->db));
+ goto out;
+ }
+
+ /* we don't need to keep syncing */
+ sqlite3_exec (filelists->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+ filelists->priv->loaded = TRUE;
+out:
+ return filelists->priv->loaded;
+}
+
+/**
+ * zif_store_remote_sqlite_get_id_cb:
+ **/
+static gint
+zif_md_filelists_sqlite_get_id_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gchar **pkgid = (gchar **) data;
+ *pkgid = g_strdup (argv[0]);
+ return 0;
+}
+
+/**
+ * zif_md_filelists_sqlite_get_files_cb:
+ **/
+static gint
+zif_md_filelists_sqlite_get_files_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gint i;
+ gchar **filenames = NULL;
+ gchar **filenames_r = NULL;
+ gchar **id_r = NULL;
+ ZifMdFilelistsData *fldata = (ZifMdFilelistsData *) data;
+
+ /* get pointers to the arguments */
+ for (i=0;i<argc;i++) {
+ if (g_strcmp0 (col_name[i], "pkgKey") == 0)
+ id_r = &argv[i];
+ else if (g_strcmp0 (col_name[i], "filenames") == 0)
+ filenames_r = &argv[i];
+ }
+
+ /* either is undereferencable */
+ if (filenames_r == NULL || id_r == NULL) {
+ egg_warning ("no file data");
+ goto out;
+ }
+
+ /* split the filenames */
+ filenames = g_strsplit (*filenames_r, "/", -1);
+ for (i=0; filenames[i] != NULL ;i++) {
+ /* do we match */
+ if (g_strcmp0 (fldata->filename, filenames[i]) == 0) {
+ egg_debug ("found %s for %s", filenames[i], *id_r);
+ g_ptr_array_add (fldata->array, GUINT_TO_POINTER (atoi (*id_r)));
+ }
+ }
+out:
+ g_strfreev (filenames);
+ return 0;
+}
+
+/**
+ * zif_md_filelists_search_file:
+ * @md: the #ZifMdFilelists object
+ * @search: the full path that should be searched for
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets a list of all packages that contain the file.
+ * Results are pkgId's descriptors, i.e. 64 bit hashes as test.
+ *
+ * Return value: a string list of pkgId's
+ **/
+GPtrArray *
+zif_md_filelists_search_file (ZifMdFilelists *md, const gchar *search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ gchar *statement = NULL;
+ gchar *error_msg = NULL;
+ gint rc;
+ gboolean ret;
+ guint i;
+ GError *error_local = NULL;
+ gchar *filename = NULL;
+ gchar *dirname = NULL;
+ ZifMdFilelistsData *data = NULL;
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load store file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* split the search term into directory and filename */
+ dirname = g_path_get_dirname (search);
+ filename = g_path_get_basename (search);
+ egg_debug ("dirname=%s, filename=%s", dirname, filename);
+
+ /* create data struct we can pass to the callback */
+ data = g_new0 (ZifMdFilelistsData, 1);
+ data->filename = g_path_get_basename (search);
+ data->array = g_ptr_array_new ();
+
+ /* populate _array with guint pkgKey */
+ statement = g_strdup_printf ("SELECT filenames, pkgKey FROM filelist WHERE dirname = '%s'", dirname);
+ rc = sqlite3_exec (md->priv->db, statement, zif_md_filelists_sqlite_get_files_cb, data, &error_msg);
+ g_free (statement);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error (failed to get keys): %s\n", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* convert each pkgKey */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ for (i=0; i<data->array->len; i++) {
+ guint key;
+ gchar *pkgid = NULL;
+
+ /* convert the pkgKey to a pkgId */
+ key = GPOINTER_TO_UINT (g_ptr_array_index (data->array, i));
+ statement = g_strdup_printf ("SELECT pkgId FROM packages WHERE pkgKey = %i LIMIT 1", key);
+ rc = sqlite3_exec (md->priv->db, statement, zif_md_filelists_sqlite_get_id_cb, &pkgid, &error_msg);
+ g_free (statement);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error (failed to get packages): %s", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* we failed to get any results */
+ if (pkgid == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "failed to resolve pkgKey: %i", key);
+ goto out;
+ }
+
+ /* added to tracked array, so no need to free pkgid */
+ g_ptr_array_add (array, pkgid);
+ }
+out:
+ if (data != NULL) {
+ g_free (data->filename);
+ g_ptr_array_unref (data->array);
+ g_free (data);
+ }
+ g_free (dirname);
+ g_free (filename);
+ return array;
+}
+
+/**
+ * zif_md_filelists_finalize:
+ **/
+static void
+zif_md_filelists_finalize (GObject *object)
+{
+ ZifMdFilelists *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_FILELISTS (object));
+ md = ZIF_MD_FILELISTS (object);
+
+ sqlite3_close (md->priv->db);
+
+ G_OBJECT_CLASS (zif_md_filelists_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_filelists_class_init:
+ **/
+static void
+zif_md_filelists_class_init (ZifMdFilelistsClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_filelists_finalize;
+
+ /* map */
+ md_class->load = zif_md_filelists_load;
+ md_class->unload = zif_md_filelists_unload;
+ g_type_class_add_private (klass, sizeof (ZifMdFilelistsPrivate));
+}
+
+/**
+ * zif_md_filelists_init:
+ **/
+static void
+zif_md_filelists_init (ZifMdFilelists *md)
+{
+ md->priv = ZIF_MD_FILELISTS_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->db = NULL;
+}
+
+/**
+ * zif_md_filelists_new:
+ *
+ * Return value: A new #ZifMdFilelists class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdFilelists *
+zif_md_filelists_new (void)
+{
+ ZifMdFilelists *md;
+ md = g_object_new (ZIF_TYPE_MD_FILELISTS, NULL);
+ return ZIF_MD_FILELISTS (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_filelists_test (EggTest *test)
+{
+ ZifMdFilelists *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ const gchar *pkgid;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+
+ if (!egg_test_start (test, "ZifMdFilelists"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get store_remote md");
+ md = zif_md_filelists_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_FILELISTS_SQL);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum compressed");
+ ret = zif_md_set_checksum (ZIF_MD (md), "e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "2b4336cb43e75610662bc0b3a362ca4cb7ba874528735a27c0d55148c3901792");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9-filelists.sqlite.bz2");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "search for files");
+ array = zif_md_filelists_search_file (md, "/usr/bin/gnome-power-manager", cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ egg_test_assert (test, array->len == 1);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ pkgid = g_ptr_array_index (array, 0);
+ if (pkgid[0] != '\0' && strlen (pkgid) == 64)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get a correct pkgId '%s' (%i)", pkgid, strlen (pkgid));
+ g_ptr_array_unref (array);
+
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-filelists.h b/backends/yum/libzif/zif-md-filelists.h
new file mode 100644
index 0000000..d270479
--- /dev/null
+++ b/backends/yum/libzif/zif-md-filelists.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_FILELISTS_H
+#define __ZIF_MD_FILELISTS_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_FILELISTS (zif_md_filelists_get_type ())
+#define ZIF_MD_FILELISTS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_FILELISTS, ZifMdFilelists))
+#define ZIF_MD_FILELISTS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_FILELISTS, ZifMdFilelistsClass))
+#define ZIF_IS_MD_FILELISTS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_FILELISTS))
+#define ZIF_IS_MD_FILELISTS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_FILELISTS))
+#define ZIF_MD_FILELISTS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_FILELISTS, ZifMdFilelistsClass))
+
+typedef struct _ZifMdFilelists ZifMdFilelists;
+typedef struct _ZifMdFilelistsPrivate ZifMdFilelistsPrivate;
+typedef struct _ZifMdFilelistsClass ZifMdFilelistsClass;
+
+struct _ZifMdFilelists
+{
+ ZifMd parent;
+ ZifMdFilelistsPrivate *priv;
+};
+
+struct _ZifMdFilelistsClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_filelists_get_type (void);
+ZifMdFilelists *zif_md_filelists_new (void);
+GPtrArray *zif_md_filelists_search_file (ZifMdFilelists *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_FILELISTS_H */
+
diff --git a/backends/yum/libzif/zif-md-metalink.c b/backends/yum/libzif/zif-md-metalink.c
new file mode 100644
index 0000000..91f5cec
--- /dev/null
+++ b/backends/yum/libzif/zif-md-metalink.c
@@ -0,0 +1,504 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-metalink
+ * @short_description: Metalink metadata functionality
+ *
+ * Provide access to the metalink repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <glib.h>
+#include <string.h>
+
+#include "zif-md.h"
+#include "zif-md-metalink.h"
+#include "zif-config.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_METALINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_METALINK, ZifMdMetalinkPrivate))
+
+typedef enum {
+ ZIF_MD_METALINK_PARSER_SECTION_URL,
+ ZIF_MD_METALINK_PARSER_SECTION_UNKNOWN
+} ZifMdMetalinkParserSection;
+
+typedef enum {
+ ZIF_MD_METALINK_PROTOCOL_TYPE_FTP,
+ ZIF_MD_METALINK_PROTOCOL_TYPE_HTTP,
+ ZIF_MD_METALINK_PROTOCOL_TYPE_RSYNC,
+ ZIF_MD_METALINK_PROTOCOL_TYPE_UNKNOWN
+} ZifMdMetalinkProtocolType;
+
+typedef struct {
+ ZifMdMetalinkProtocolType protocol;
+ gchar *uri;
+ guint preference;
+} ZifMdMetalinkData;
+
+/**
+ * ZifMdMetalinkPrivate:
+ *
+ * Private #ZifMdMetalink data
+ **/
+struct _ZifMdMetalinkPrivate
+{
+ gboolean loaded;
+ GPtrArray *array;
+ ZifConfig *config;
+ /* for parser */
+ ZifMdMetalinkParserSection section;
+ ZifMdMetalinkData *temp;
+};
+
+G_DEFINE_TYPE (ZifMdMetalink, zif_md_metalink, ZIF_TYPE_MD)
+
+/**
+ * zif_md_metalink_protocol_type_from_text:
+ **/
+static ZifMdMetalinkProtocolType
+zif_md_metalink_protocol_type_from_text (const gchar *type_text)
+{
+ if (g_strcmp0 (type_text, "ftp") == 0)
+ return ZIF_MD_METALINK_PROTOCOL_TYPE_FTP;
+ if (g_strcmp0 (type_text, "http") == 0)
+ return ZIF_MD_METALINK_PROTOCOL_TYPE_HTTP;
+ if (g_strcmp0 (type_text, "rsync") == 0)
+ return ZIF_MD_METALINK_PROTOCOL_TYPE_RSYNC;
+ return ZIF_MD_METALINK_PROTOCOL_TYPE_UNKNOWN;
+}
+
+/**
+ * zif_md_metalink_parser_start_element:
+ **/
+static void
+zif_md_metalink_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
+{
+ guint i;
+ ZifMdMetalink *metalink = user_data;
+
+ g_return_if_fail (ZIF_IS_MD_METALINK (metalink));
+ g_return_if_fail (metalink->priv->temp == NULL);
+
+ /* just ignore non url entries */
+ if (g_strcmp0 (element_name, "url") != 0) {
+ metalink->priv->temp = NULL;
+ metalink->priv->section = ZIF_MD_METALINK_PARSER_SECTION_UNKNOWN;
+ goto out;
+ }
+
+ /* create new element */
+ metalink->priv->section = ZIF_MD_METALINK_PARSER_SECTION_URL;
+ metalink->priv->temp = g_new0 (ZifMdMetalinkData, 1);
+
+ /* read keys */
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "protocol") == 0)
+ metalink->priv->temp->protocol = zif_md_metalink_protocol_type_from_text (attribute_values[i]);
+ if (g_strcmp0 (attribute_names[i], "preference") == 0)
+ metalink->priv->temp->preference = atoi (attribute_values[i]);
+ }
+
+ /* add to array */
+ g_ptr_array_add (metalink->priv->array, metalink->priv->temp);
+out:
+ return;
+}
+
+/**
+ * zif_md_metalink_parser_end_element:
+ **/
+static void
+zif_md_metalink_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
+ gpointer user_data, GError **error)
+{
+ ZifMdMetalink *metalink = user_data;
+ metalink->priv->temp = NULL;
+ metalink->priv->section = ZIF_MD_METALINK_PARSER_SECTION_UNKNOWN;
+}
+
+/**
+ * zif_md_metalink_parser_text:
+ **/
+static void
+zif_md_metalink_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
+ gpointer user_data, GError **error)
+
+{
+ ZifMdMetalink *metalink = user_data;
+ gchar *uri = NULL;
+ guint len;
+
+ if (metalink->priv->section != ZIF_MD_METALINK_PARSER_SECTION_URL)
+ goto out;
+
+ /* shouldn't happen */
+ if (metalink->priv->temp == NULL) {
+ egg_warning ("no data, so cannot save %s!", text);
+ goto out;
+ }
+
+ /* save uri */
+ if (metalink->priv->temp->uri != NULL) {
+ egg_warning ("previously set uri to '%s', cannot overwrite with '%s'", metalink->priv->temp->uri, text);
+ goto out;
+ }
+
+ /* copy */
+ uri = g_strdup (text);
+
+ /* do we need to trim the junk from the end */
+ if (g_str_has_suffix (uri, "/repodata/repomd.xml")) {
+ len = strlen (uri);
+ uri[len-19] = '\0';
+ }
+
+ /* save */
+ metalink->priv->temp->uri = g_strdup (uri);
+out:
+ g_free (uri);
+ return;
+}
+
+/**
+ * zif_md_metalink_unload:
+ **/
+static gboolean
+zif_md_metalink_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_metalink_load:
+ **/
+static gboolean
+zif_md_metalink_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = TRUE;
+ gchar *contents = NULL;
+ const gchar *filename;
+ gsize size;
+ GMarkupParseContext *context = NULL;
+ const GMarkupParser gpk_md_metalink_markup_parser = {
+ zif_md_metalink_parser_start_element,
+ zif_md_metalink_parser_end_element,
+ zif_md_metalink_parser_text,
+ NULL, /* passthrough */
+ NULL /* error */
+ };
+ ZifMdMetalink *metalink = ZIF_MD_METALINK (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_METALINK (md), FALSE);
+
+ /* already loaded */
+ if (metalink->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for metalink");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+
+ /* get repo contents */
+ ret = g_file_get_contents (filename, &contents, &size, error);
+ if (!ret)
+ goto out;
+
+ /* create parser */
+ context = g_markup_parse_context_new (&gpk_md_metalink_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, metalink, NULL);
+
+ /* parse data */
+ ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
+ if (!ret)
+ goto out;
+
+ metalink->priv->loaded = TRUE;
+out:
+ if (context != NULL)
+ g_markup_parse_context_free (context);
+ g_free (contents);
+ return ret;
+}
+
+/**
+ * zif_md_metalink_get_uris:
+ * @md: the #ZifMdMetalink object
+ * @threshold: the threshold in percent
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all mirrors we should use.
+ *
+ * Return value: the uris to use as an array of strings
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_metalink_get_uris (ZifMdMetalink *md, guint threshold,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret;
+ guint len;
+ gchar *uri;
+ GPtrArray *array = NULL;
+ GError *error_local = NULL;
+ ZifMdMetalinkData *data;
+ guint i;
+ ZifMdMetalink *metalink = ZIF_MD_METALINK (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_METALINK (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!metalink->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get mirrors from metalink: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get list */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ len = metalink->priv->array->len;
+ for (i=0; i<len; i++) {
+ data = g_ptr_array_index (metalink->priv->array, i);
+
+ /* ignore not http mirrors */
+ if (data->protocol != ZIF_MD_METALINK_PROTOCOL_TYPE_HTTP)
+ continue;
+
+ /* ignore low priority */
+ if (data->preference >= threshold) {
+ uri = zif_config_expand_substitutions (md->priv->config, data->uri, &error_local);
+ if (uri == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to expand substitutions: %s", error_local->message);
+ g_error_free (error_local);
+ /* rip apart what we've done already */
+ g_ptr_array_unref (array);
+ array = NULL;
+ goto out;
+ }
+ g_ptr_array_add (array, uri);
+ }
+ }
+out:
+ return array;
+}
+
+/**
+ * zif_md_metalink_free_data:
+ **/
+static void
+zif_md_metalink_free_data (ZifMdMetalinkData *data)
+{
+ g_free (data->uri);
+ g_free (data);
+}
+
+/**
+ * zif_md_metalink_finalize:
+ **/
+static void
+zif_md_metalink_finalize (GObject *object)
+{
+ ZifMdMetalink *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_METALINK (object));
+ md = ZIF_MD_METALINK (object);
+
+ g_ptr_array_unref (md->priv->array);
+ g_object_unref (md->priv->config);
+
+ G_OBJECT_CLASS (zif_md_metalink_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_metalink_class_init:
+ **/
+static void
+zif_md_metalink_class_init (ZifMdMetalinkClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_metalink_finalize;
+
+ /* map */
+ md_class->load = zif_md_metalink_load;
+ md_class->unload = zif_md_metalink_unload;
+ g_type_class_add_private (klass, sizeof (ZifMdMetalinkPrivate));
+}
+
+/**
+ * zif_md_metalink_init:
+ **/
+static void
+zif_md_metalink_init (ZifMdMetalink *md)
+{
+ md->priv = ZIF_MD_METALINK_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->config = zif_config_new ();
+ md->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) zif_md_metalink_free_data);
+}
+
+/**
+ * zif_md_metalink_new:
+ *
+ * Return value: A new #ZifMdMetalink class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdMetalink *
+zif_md_metalink_new (void)
+{
+ ZifMdMetalink *md;
+ md = g_object_new (ZIF_TYPE_MD_METALINK, NULL);
+ return ZIF_MD_METALINK (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_metalink_test (EggTest *test)
+{
+ ZifMdMetalink *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ const gchar *uri;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ ZifConfig *config;
+
+ if (!egg_test_start (test, "ZifMdMetalink"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+ config = zif_config_new ();
+ zif_config_set_filename (config, "../test/etc/yum.conf", NULL);
+
+ /************************************************************/
+ egg_test_title (test, "get md_metalink md");
+ md = zif_md_metalink_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_METALINK);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/metalink.xml");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "get uris");
+ array = zif_md_metalink_get_uris (md, 50, cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len == 47)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "incorrect value %i", array->len);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ uri = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (uri, "http://www.mirrorservice.org/sites/download.fedora.redhat.com/pub/fedora/linux/releases/12/Everything/i386/os/") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct url '%s'", uri);
+ g_ptr_array_unref (array);
+
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+ g_object_unref (config);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-metalink.h b/backends/yum/libzif/zif-md-metalink.h
new file mode 100644
index 0000000..0032c0b
--- /dev/null
+++ b/backends/yum/libzif/zif-md-metalink.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_METALINK_H
+#define __ZIF_MD_METALINK_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_METALINK (zif_md_metalink_get_type ())
+#define ZIF_MD_METALINK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_METALINK, ZifMdMetalink))
+#define ZIF_MD_METALINK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_METALINK, ZifMdMetalinkClass))
+#define ZIF_IS_MD_METALINK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_METALINK))
+#define ZIF_IS_MD_METALINK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_METALINK))
+#define ZIF_MD_METALINK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_METALINK, ZifMdMetalinkClass))
+
+typedef struct _ZifMdMetalink ZifMdMetalink;
+typedef struct _ZifMdMetalinkPrivate ZifMdMetalinkPrivate;
+typedef struct _ZifMdMetalinkClass ZifMdMetalinkClass;
+
+struct _ZifMdMetalink
+{
+ ZifMd parent;
+ ZifMdMetalinkPrivate *priv;
+};
+
+struct _ZifMdMetalinkClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_metalink_get_type (void);
+ZifMdMetalink *zif_md_metalink_new (void);
+GPtrArray *zif_md_metalink_get_uris (ZifMdMetalink *md,
+ guint threshold,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_METALINK_H */
+
diff --git a/backends/yum/libzif/zif-md-mirrorlist.c b/backends/yum/libzif/zif-md-mirrorlist.c
new file mode 100644
index 0000000..80fdce6
--- /dev/null
+++ b/backends/yum/libzif/zif-md-mirrorlist.c
@@ -0,0 +1,347 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-mirrorlist
+ * @short_description: Mirrorlist metadata functionality
+ *
+ * Provide access to the mirrorlist repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <glib.h>
+
+#include "zif-md.h"
+#include "zif-md-mirrorlist.h"
+#include "zif-config.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_MIRRORLIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_MIRRORLIST, ZifMdMirrorlistPrivate))
+
+/**
+ * ZifMdMirrorlistPrivate:
+ *
+ * Private #ZifMdMirrorlist data
+ **/
+struct _ZifMdMirrorlistPrivate
+{
+ gboolean loaded;
+ GPtrArray *array;
+ ZifConfig *config;
+};
+
+G_DEFINE_TYPE (ZifMdMirrorlist, zif_md_mirrorlist, ZIF_TYPE_MD)
+
+/**
+ * zif_md_mirrorlist_unload:
+ **/
+static gboolean
+zif_md_mirrorlist_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_mirrorlist_load:
+ **/
+static gboolean
+zif_md_mirrorlist_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = TRUE;
+ gchar *contents = NULL;
+ const gchar *filename;
+ gchar **lines = NULL;
+ guint i;
+ ZifMdMirrorlist *mirrorlist = ZIF_MD_MIRRORLIST (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_MIRRORLIST (md), FALSE);
+
+ /* already loaded */
+ if (mirrorlist->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for mirrorlist");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+
+ /* get repo contents */
+ ret = g_file_get_contents (filename, &contents, NULL, error);
+ if (!ret)
+ goto out;
+
+ /* split, and add uris */
+ lines = g_strsplit (contents, "\n", -1);
+ for (i=0; lines[i] != NULL; i++) {
+ if (lines[i][0] == '\0' ||
+ lines[i][0] == '#')
+ continue;
+ if (g_str_has_prefix (lines[i], "http://"))
+ g_ptr_array_add (mirrorlist->priv->array, g_strdup (lines[i]));
+ }
+
+ mirrorlist->priv->loaded = TRUE;
+out:
+ g_strfreev (lines);
+ g_free (contents);
+ return ret;
+}
+
+/**
+ * zif_md_mirrorlist_get_uris:
+ * @md: the #ZifMdMirrorlist object
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all mirrors we should use.
+ *
+ * Return value: the uris to use as an array of strings
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_mirrorlist_get_uris (ZifMdMirrorlist *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret;
+ guint len;
+ GPtrArray *array = NULL;
+ GError *error_local = NULL;
+ const gchar *data;
+ gchar *uri;
+ guint i;
+ ZifMdMirrorlist *mirrorlist = ZIF_MD_MIRRORLIST (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_MIRRORLIST (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!mirrorlist->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get uris from mirrorlist: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get list */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ len = mirrorlist->priv->array->len;
+ for (i=0; i<len; i++) {
+ data = g_ptr_array_index (mirrorlist->priv->array, i);
+ uri = zif_config_expand_substitutions (md->priv->config, data, &error_local);
+ if (uri == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to expand substitutions: %s", error_local->message);
+ g_error_free (error_local);
+ /* rip apart what we've done already */
+ g_ptr_array_unref (array);
+ array = NULL;
+ goto out;
+ }
+ g_ptr_array_add (array, uri);
+ }
+out:
+ return array;
+}
+
+/**
+ * zif_md_mirrorlist_finalize:
+ **/
+static void
+zif_md_mirrorlist_finalize (GObject *object)
+{
+ ZifMdMirrorlist *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_MIRRORLIST (object));
+ md = ZIF_MD_MIRRORLIST (object);
+
+ g_ptr_array_unref (md->priv->array);
+ g_object_unref (md->priv->config);
+
+ G_OBJECT_CLASS (zif_md_mirrorlist_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_mirrorlist_class_init:
+ **/
+static void
+zif_md_mirrorlist_class_init (ZifMdMirrorlistClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_mirrorlist_finalize;
+
+ /* map */
+ md_class->load = zif_md_mirrorlist_load;
+ md_class->unload = zif_md_mirrorlist_unload;
+ g_type_class_add_private (klass, sizeof (ZifMdMirrorlistPrivate));
+}
+
+/**
+ * zif_md_mirrorlist_init:
+ **/
+static void
+zif_md_mirrorlist_init (ZifMdMirrorlist *md)
+{
+ md->priv = ZIF_MD_MIRRORLIST_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->config = zif_config_new ();
+ md->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+}
+
+/**
+ * zif_md_mirrorlist_new:
+ *
+ * Return value: A new #ZifMdMirrorlist class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdMirrorlist *
+zif_md_mirrorlist_new (void)
+{
+ ZifMdMirrorlist *md;
+ md = g_object_new (ZIF_TYPE_MD_MIRRORLIST, NULL);
+ return ZIF_MD_MIRRORLIST (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_mirrorlist_test (EggTest *test)
+{
+ ZifMdMirrorlist *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ const gchar *uri;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ ZifConfig *config;
+
+ if (!egg_test_start (test, "ZifMdMirrorlist"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+ config = zif_config_new ();
+ zif_config_set_filename (config, "../test/etc/yum.conf", NULL);
+
+ /************************************************************/
+ egg_test_title (test, "get md_mirrorlist md");
+ md = zif_md_mirrorlist_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_MIRRORLIST);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/mirrorlist.txt");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "get uris");
+ array = zif_md_mirrorlist_get_uris (md, cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len == 3)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "incorrect value %i", array->len);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ uri = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (uri, "http://rpm.livna.org/repo/11/i386/") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct url '%s'", uri);
+ g_ptr_array_unref (array);
+
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+ g_object_unref (config);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-mirrorlist.h b/backends/yum/libzif/zif-md-mirrorlist.h
new file mode 100644
index 0000000..9b6e36a
--- /dev/null
+++ b/backends/yum/libzif/zif-md-mirrorlist.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_MIRRORLIST_H
+#define __ZIF_MD_MIRRORLIST_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_MIRRORLIST (zif_md_mirrorlist_get_type ())
+#define ZIF_MD_MIRRORLIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_MIRRORLIST, ZifMdMirrorlist))
+#define ZIF_MD_MIRRORLIST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_MIRRORLIST, ZifMdMirrorlistClass))
+#define ZIF_IS_MD_MIRRORLIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_MIRRORLIST))
+#define ZIF_IS_MD_MIRRORLIST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_MIRRORLIST))
+#define ZIF_MD_MIRRORLIST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_MIRRORLIST, ZifMdMirrorlistClass))
+
+typedef struct _ZifMdMirrorlist ZifMdMirrorlist;
+typedef struct _ZifMdMirrorlistPrivate ZifMdMirrorlistPrivate;
+typedef struct _ZifMdMirrorlistClass ZifMdMirrorlistClass;
+
+struct _ZifMdMirrorlist
+{
+ ZifMd parent;
+ ZifMdMirrorlistPrivate *priv;
+};
+
+struct _ZifMdMirrorlistClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_mirrorlist_get_type (void);
+ZifMdMirrorlist *zif_md_mirrorlist_new (void);
+GPtrArray *zif_md_mirrorlist_get_uris (ZifMdMirrorlist *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_MIRRORLIST_H */
+
diff --git a/backends/yum/libzif/zif-md-primary-sql.c b/backends/yum/libzif/zif-md-primary-sql.c
new file mode 100644
index 0000000..d9bcd7f
--- /dev/null
+++ b/backends/yum/libzif/zif-md-primary-sql.c
@@ -0,0 +1,668 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009-2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-primary-sql
+ * @short_description: Primary metadata functionality
+ *
+ * Provide access to the primary repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sqlite3.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-md-primary-sql.h"
+#include "zif-package-remote.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_PRIMARY_SQL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_PRIMARY_SQL, ZifMdPrimarySqlPrivate))
+
+/**
+ * ZifMdPrimarySqlPrivate:
+ *
+ * Private #ZifMdPrimarySql data
+ **/
+struct _ZifMdPrimarySqlPrivate
+{
+ gboolean loaded;
+ sqlite3 *db;
+};
+
+typedef struct {
+ const gchar *id;
+ GPtrArray *packages;
+} ZifMdPrimarySqlData;
+
+G_DEFINE_TYPE (ZifMdPrimarySql, zif_md_primary_sql, ZIF_TYPE_MD)
+
+/**
+ * zif_md_primary_sql_unload:
+ **/
+static gboolean
+zif_md_primary_sql_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_primary_sql_load:
+ **/
+static gboolean
+zif_md_primary_sql_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ const gchar *filename;
+ gint rc;
+ ZifMdPrimarySql *primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), FALSE);
+
+ /* already loaded */
+ if (primary_sql->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for primary_sql");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+ rc = sqlite3_open (filename, &primary_sql->priv->db);
+ if (rc != 0) {
+ egg_warning ("Can't open database: %s\n", sqlite3_errmsg (primary_sql->priv->db));
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "can't open database: %s", sqlite3_errmsg (primary_sql->priv->db));
+ goto out;
+ }
+
+ /* we don't need to keep syncing */
+ sqlite3_exec (primary_sql->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+ primary_sql->priv->loaded = TRUE;
+out:
+ return primary_sql->priv->loaded;
+}
+
+/**
+ * zif_md_primary_sql_sqlite_create_package_cb:
+ **/
+static gint
+zif_md_primary_sql_sqlite_create_package_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ ZifMdPrimarySqlData *fldata = (ZifMdPrimarySqlData *) data;
+ ZifPackageRemote *package;
+
+ package = zif_package_remote_new ();
+ zif_package_remote_set_from_repo (package, argc, col_name, argv, fldata->id, NULL);
+ g_ptr_array_add (fldata->packages, package);
+
+ return 0;
+}
+
+/**
+ * zif_md_primary_sql_search:
+ **/
+static GPtrArray *
+zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *pred,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *statement = NULL;
+ gchar *error_msg = NULL;
+ gint rc;
+ gboolean ret;
+ GError *error_local = NULL;
+ ZifMdPrimarySqlData *data = NULL;
+ GPtrArray *array = NULL;
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load md_primary_sql file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* create data struct we can pass to the callback */
+ data = g_new0 (ZifMdPrimarySqlData, 1);
+ data->id = zif_md_get_id (ZIF_MD (md));
+ data->packages = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+ statement = g_strdup_printf ("SELECT pkgId, name, arch, version, "
+ "epoch, release, summary, description, url, "
+ "rpm_license, rpm_group, size_package, location_href FROM packages %s", pred);
+ rc = sqlite3_exec (md->priv->db, statement, zif_md_primary_sql_sqlite_create_package_cb, data, &error_msg);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error: %s\n", error_msg);
+ sqlite3_free (error_msg);
+ g_ptr_array_unref (data->packages);
+ goto out;
+ }
+ /* list of packages */
+ array = data->packages;
+out:
+ g_free (data);
+ g_free (statement);
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_resolve:
+ **/
+static GPtrArray *
+zif_md_primary_sql_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ pred = g_strdup_printf ("WHERE name = '%s'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_search_name:
+ **/
+static GPtrArray *
+zif_md_primary_sql_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ pred = g_strdup_printf ("WHERE name LIKE '%%%s%%'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_search_details:
+ **/
+static GPtrArray *
+zif_md_primary_sql_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ pred = g_strdup_printf ("WHERE name LIKE '%%%s%%' OR summary LIKE '%%%s%%' OR description LIKE '%%%s%%'", search, search, search);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_search_group:
+ **/
+static GPtrArray *
+zif_md_primary_sql_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ pred = g_strdup_printf ("WHERE rpm_group = '%s'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_search_pkgid:
+ **/
+static GPtrArray *
+zif_md_primary_sql_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ pred = g_strdup_printf ("WHERE pkgid = '%s'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_search_pkgkey:
+ **/
+static GPtrArray *
+zif_md_primary_sql_search_pkgkey (ZifMd *md, guint pkgkey,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ pred = g_strdup_printf ("WHERE pkgKey = '%i'", pkgkey);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_sqlite_pkgkey_cb:
+ **/
+static gint
+zif_md_primary_sql_sqlite_pkgkey_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gint i;
+ guint pkgkey;
+ gboolean ret;
+ GPtrArray *array = (GPtrArray *) data;
+
+ /* get the ID */
+ for (i=0; i<argc; i++) {
+ if (g_strcmp0 (col_name[i], "pkgKey") == 0) {
+ ret = egg_strtouint (argv[i], &pkgkey);
+ if (ret)
+ g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
+ else
+ egg_warning ("could not parse pkgKey '%s'", argv[i]);
+ } else {
+ egg_warning ("unrecognized: %s=%s", col_name[i], argv[i]);
+ }
+ }
+ return 0;
+}
+
+/**
+ * zif_md_primary_sql_what_provides:
+ **/
+static GPtrArray *
+zif_md_primary_sql_what_provides (ZifMd *md, const gchar *search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *statement = NULL;
+ gchar *error_msg = NULL;
+ gint rc;
+ gboolean ret;
+ GError *error_local = NULL;
+ GPtrArray *array = NULL;
+ GPtrArray *array_tmp = NULL;
+ GPtrArray *pkgkey_array = NULL;
+ guint i;
+ guint pkgkey;
+ ZifCompletion *completion_local;
+ ZifCompletion *completion_loop;
+ ZifPackage *package;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ /* setup completion */
+ if (md_primary_sql->priv->loaded)
+ zif_completion_set_number_steps (completion, 2);
+ else
+ zif_completion_set_number_steps (completion, 3);
+
+ /* if not already loaded, load */
+ if (!md_primary_sql->priv->loaded) {
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_md_load (md, cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load md_primary_sql file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+ }
+
+ /* create data struct we can pass to the callback */
+ pkgkey_array = g_ptr_array_new ();
+ statement = g_strdup_printf ("SELECT pkgKey FROM provides WHERE name = '%s'", search);
+ rc = sqlite3_exec (md_primary_sql->priv->db, statement, zif_md_primary_sql_sqlite_pkgkey_cb, pkgkey_array, &error_msg);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error: %s\n", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* output array */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+ /* resolve each pkgkey to a package */
+ completion_local = zif_completion_get_child (completion);
+ if (pkgkey_array->len > 0)
+ zif_completion_set_number_steps (completion_local, pkgkey_array->len);
+ for (i=0; i<pkgkey_array->len; i++) {
+ pkgkey = GPOINTER_TO_UINT (g_ptr_array_index (pkgkey_array, i));
+
+ /* get packages for pkgKey */
+ completion_loop = zif_completion_get_child (completion_local);
+ array_tmp = zif_md_primary_sql_search_pkgkey (md, pkgkey, cancellable, completion, error);
+ if (array_tmp == NULL) {
+ g_ptr_array_unref (array);
+ array = NULL;
+ goto out;
+ }
+
+ /* check we only got one result */
+ if (array_tmp->len == 0) {
+ egg_warning ("no package for pkgKey %i", pkgkey);
+ } else if (array_tmp->len > 1 || array_tmp->len == 0) {
+ egg_warning ("more than one package for pkgKey %i", pkgkey);
+ } else {
+ package = g_ptr_array_index (array_tmp, 0);
+ g_ptr_array_add (array, g_object_ref (package));
+ }
+
+ /* clear array */
+ g_ptr_array_unref (array_tmp);
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ g_free (statement);
+ if (pkgkey_array != NULL)
+ g_ptr_array_unref (pkgkey_array);
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_find_package:
+ **/
+static GPtrArray *
+zif_md_primary_sql_find_package (ZifMd *md, const gchar *package_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *pred;
+ GPtrArray *array;
+ gchar **split;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate, TODO: search version (epoch+release) */
+ split = pk_package_id_split (package_id);
+ pred = g_strdup_printf ("WHERE name = '%s' AND arch = '%s'", split[PK_PACKAGE_ID_NAME], split[PK_PACKAGE_ID_ARCH]);
+ array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
+ g_free (pred);
+ g_strfreev (split);
+
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_get_packages:
+ **/
+static GPtrArray *
+zif_md_primary_sql_get_packages (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array;
+ ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* search with predicate */
+ array = zif_md_primary_sql_search (md_primary_sql, "", cancellable, completion, error);
+ return array;
+}
+
+/**
+ * zif_md_primary_sql_finalize:
+ **/
+static void
+zif_md_primary_sql_finalize (GObject *object)
+{
+ ZifMdPrimarySql *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_PRIMARY_SQL (object));
+ md = ZIF_MD_PRIMARY_SQL (object);
+
+ sqlite3_close (md->priv->db);
+
+ G_OBJECT_CLASS (zif_md_primary_sql_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_primary_sql_class_init:
+ **/
+static void
+zif_md_primary_sql_class_init (ZifMdPrimarySqlClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_primary_sql_finalize;
+
+ /* map */
+ md_class->load = zif_md_primary_sql_load;
+ md_class->unload = zif_md_primary_sql_unload;
+ md_class->search_name = zif_md_primary_sql_search_name;
+ md_class->search_details = zif_md_primary_sql_search_details;
+ md_class->search_group = zif_md_primary_sql_search_group;
+ md_class->search_pkgid = zif_md_primary_sql_search_pkgid;
+ md_class->what_provides = zif_md_primary_sql_what_provides;
+ md_class->resolve = zif_md_primary_sql_resolve;
+ md_class->get_packages = zif_md_primary_sql_get_packages;
+ md_class->find_package = zif_md_primary_sql_find_package;
+ g_type_class_add_private (klass, sizeof (ZifMdPrimarySqlPrivate));
+}
+
+/**
+ * zif_md_primary_sql_init:
+ **/
+static void
+zif_md_primary_sql_init (ZifMdPrimarySql *md)
+{
+ md->priv = ZIF_MD_PRIMARY_SQL_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->db = NULL;
+}
+
+/**
+ * zif_md_primary_sql_new:
+ *
+ * Return value: A new #ZifMdPrimarySql class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdPrimarySql *
+zif_md_primary_sql_new (void)
+{
+ ZifMdPrimarySql *md;
+ md = g_object_new (ZIF_TYPE_MD_PRIMARY_SQL, NULL);
+ return ZIF_MD_PRIMARY_SQL (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_primary_sql_test (EggTest *test)
+{
+ ZifMdPrimarySql *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ ZifPackage *package;
+ ZifString *summary;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+
+ if (!egg_test_start (test, "ZifMdPrimarySql"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get md_primary_sql md");
+ md = zif_md_primary_sql_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_PRIMARY_SQL);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum compressed");
+ ret = zif_md_set_checksum (ZIF_MD (md), "35d817e2bac701525fa72cec57387a2e3457bf32642adeee1e345cc180044c86");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "9b2b072a83b5175bc88d03ee64b52b39c0d40fec1516baa62dba81eea73cc645");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/35d817e2bac701525fa72cec57387a2e3457bf32642adeee1e345cc180044c86-primary.sqlite.bz2");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "search for files");
+ array = zif_md_primary_sql_resolve (md, "gnome-power-manager", cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ egg_test_assert (test, array->len == 1);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ package = g_ptr_array_index (array, 0);
+ summary = zif_package_get_summary (package, NULL);
+ if (g_strcmp0 (zif_string_get_value (summary), "GNOME Power Manager") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct summary '%s'", zif_string_get_value (summary));
+ zif_string_unref (summary);
+ g_ptr_array_unref (array);
+
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+ g_object_unref (md);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-primary-sql.h b/backends/yum/libzif/zif-md-primary-sql.h
new file mode 100644
index 0000000..746cb10
--- /dev/null
+++ b/backends/yum/libzif/zif-md-primary-sql.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009-2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_PRIMARY_SQL_H
+#define __ZIF_MD_PRIMARY_SQL_H
+
+#include <glib-object.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_PRIMARY_SQL (zif_md_primary_sql_get_type ())
+#define ZIF_MD_PRIMARY_SQL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_PRIMARY_SQL, ZifMdPrimarySql))
+#define ZIF_MD_PRIMARY_SQL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_PRIMARY_SQL, ZifMdPrimarySqlClass))
+#define ZIF_IS_MD_PRIMARY_SQL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_PRIMARY_SQL))
+#define ZIF_IS_MD_PRIMARY_SQL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_PRIMARY_SQL))
+#define ZIF_MD_PRIMARY_SQL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_PRIMARY_SQL, ZifMdPrimarySqlClass))
+
+typedef struct _ZifMdPrimarySql ZifMdPrimarySql;
+typedef struct _ZifMdPrimarySqlPrivate ZifMdPrimarySqlPrivate;
+typedef struct _ZifMdPrimarySqlClass ZifMdPrimarySqlClass;
+
+struct _ZifMdPrimarySql
+{
+ ZifMd parent;
+ ZifMdPrimarySqlPrivate *priv;
+};
+
+struct _ZifMdPrimarySqlClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_primary_sql_get_type (void);
+ZifMdPrimarySql *zif_md_primary_sql_new (void);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_PRIMARY_SQL_H */
+
diff --git a/backends/yum/libzif/zif-md-primary-xml.c b/backends/yum/libzif/zif-md-primary-xml.c
new file mode 100644
index 0000000..1ad8c66
--- /dev/null
+++ b/backends/yum/libzif/zif-md-primary-xml.c
@@ -0,0 +1,890 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-primary-xml
+ * @short_description: PrimaryXml metadata functionality
+ *
+ * Provide access to the primary_xml repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+typedef enum {
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE,
+ ZIF_MD_PRIMARY_XML_SECTION_UNKNOWN
+} ZifMdPrimaryXmlSection;
+
+typedef enum {
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_NAME,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_ARCH,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_VERSION,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_CHECKSUM,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_SUMMARY,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_DESCRIPTION,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_URL,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_SIZE,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_LICENCE,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_LOCATION,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_GROUP,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_PROVIDES,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_REQUIRES,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_OBSOLETES,
+ ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_UNKNOWN
+} ZifMdPrimaryXmlSectionPackage;
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sqlite3.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-utils.h"
+#include "zif-md-primary-xml.h"
+#include "zif-package-remote.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_PRIMARY_XML_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_PRIMARY_XML, ZifMdPrimaryXmlPrivate))
+
+/**
+ * ZifMdPrimaryXmlPrivate:
+ *
+ * Private #ZifMdPrimaryXml data
+ **/
+struct _ZifMdPrimaryXmlPrivate
+{
+ gboolean loaded;
+ ZifMdPrimaryXmlSection section;
+ ZifMdPrimaryXmlSectionPackage section_package;
+ ZifPackage *package_temp;
+ GPtrArray *array;
+ gchar *package_name_temp;
+ gchar *package_arch_temp;
+ gchar *package_version_temp;
+ gchar *package_release_temp;
+ guint package_epoch_temp;
+};
+
+G_DEFINE_TYPE (ZifMdPrimaryXml, zif_md_primary_xml, ZIF_TYPE_MD)
+
+/**
+ * zif_md_primary_xml_unload:
+ **/
+static gboolean
+zif_md_primary_xml_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+
+/**
+ * zif_md_primary_xml_parser_start_element:
+ **/
+static void
+zif_md_primary_xml_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
+{
+ guint i;
+ ZifMdPrimaryXml *primary_xml = user_data;
+
+ g_return_if_fail (ZIF_IS_MD_PRIMARY_XML (primary_xml));
+
+ /* group element */
+ if (primary_xml->priv->section == ZIF_MD_PRIMARY_XML_SECTION_UNKNOWN) {
+
+ /* start of list */
+ if (g_strcmp0 (element_name, "metadata") == 0)
+ goto out;
+
+ /* start of update */
+ if (g_strcmp0 (element_name, "package") == 0) {
+ primary_xml->priv->section = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE;
+ primary_xml->priv->package_temp = zif_package_new ();
+ goto out;
+ }
+
+ egg_warning ("unhandled element: %s", element_name);
+
+ goto out;
+ }
+
+ /* update element */
+ if (primary_xml->priv->section == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE) {
+
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_UNKNOWN) {
+ if (g_strcmp0 (element_name, "packager") == 0 ||
+ g_strcmp0 (element_name, "format") == 0 ||
+ g_strcmp0 (element_name, "file") == 0 ||
+ g_strcmp0 (element_name, "rpm:vendor") == 0 ||
+ g_strcmp0 (element_name, "rpm:buildhost") == 0 ||
+ g_strcmp0 (element_name, "rpm:header-range") == 0 ||
+ g_strcmp0 (element_name, "rpm:sourcerpm") == 0 ||
+ g_strcmp0 (element_name, "time") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_UNKNOWN;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "name") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_NAME;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "checksum") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_CHECKSUM;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "arch") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_ARCH;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "summary") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_SUMMARY;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "description") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_DESCRIPTION;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "url") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_URL;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "version") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_VERSION;
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "rel") == 0) {
+ primary_xml->priv->package_release_temp = g_strdup (attribute_values[i]);
+ } else if (g_strcmp0 (attribute_names[i], "epoch") == 0) {
+ primary_xml->priv->package_epoch_temp = atoi (attribute_values[i]);
+ } else if (g_strcmp0 (attribute_names[i], "ver") == 0) {
+ primary_xml->priv->package_version_temp = g_strdup (attribute_values[i]);
+ }
+ }
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "size") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_SIZE;
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "package") == 0) {
+ zif_package_set_size (primary_xml->priv->package_temp, atoi (attribute_values[i]));
+ }
+ }
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "location") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_LOCATION;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "rpm:license") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_LICENCE;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "rpm:group") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_GROUP;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "rpm:provides") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_PROVIDES;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "rpm:requires") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_REQUIRES;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "rpm:obsoletes") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_OBSOLETES;
+ goto out;
+ }
+ egg_warning ("unhandled update base tag: %s", element_name);
+ goto out;
+
+ } else if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_REQUIRES) {
+ if (g_strcmp0 (element_name, "rpm:entry") == 0) {
+ goto out;
+ }
+ } else if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_OBSOLETES) {
+ if (g_strcmp0 (element_name, "rpm:entry") == 0) {
+ goto out;
+ }
+ } else if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_PROVIDES) {
+ if (g_strcmp0 (element_name, "rpm:entry") == 0) {
+ goto out;
+ }
+ goto out;
+ }
+ egg_warning ("unhandled package tag: %s", element_name);
+ }
+
+ egg_warning ("unhandled base tag: %s", element_name);
+
+out:
+ return;
+}
+
+/**
+ * zif_md_primary_xml_parser_end_element:
+ **/
+static void
+zif_md_primary_xml_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
+ gpointer user_data, GError **error)
+{
+ ZifMdPrimaryXml *primary_xml = user_data;
+ gchar *package_id = NULL;
+
+ /* no element */
+ if (primary_xml->priv->section == ZIF_MD_PRIMARY_XML_SECTION_UNKNOWN) {
+ /* end of list */
+ if (g_strcmp0 (element_name, "metadata") == 0)
+ goto out;
+ egg_warning ("unhandled base end tag: %s", element_name);
+ }
+
+ /* update element */
+ if (primary_xml->priv->section == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE) {
+
+ /* end of update */
+ if (g_strcmp0 (element_name, "package") == 0) {
+ primary_xml->priv->section = ZIF_MD_PRIMARY_XML_SECTION_UNKNOWN;
+
+ /* add to array */
+ package_id = zif_package_id_from_nevra (primary_xml->priv->package_name_temp,
+ primary_xml->priv->package_epoch_temp,
+ primary_xml->priv->package_version_temp,
+ primary_xml->priv->package_release_temp,
+ primary_xml->priv->package_arch_temp,
+ zif_md_get_id (ZIF_MD (primary_xml)));
+ zif_package_set_id (primary_xml->priv->package_temp, package_id);
+ g_ptr_array_add (primary_xml->priv->array, primary_xml->priv->package_temp);
+ primary_xml->priv->package_temp = NULL;
+ goto out;
+ }
+
+ /* do not change section */
+ if (g_strcmp0 (element_name, "rpm:entry") == 0) {
+ goto out;
+ }
+
+ if (g_strcmp0 (element_name, "name") == 0 ||
+ g_strcmp0 (element_name, "summary") == 0 ||
+ g_strcmp0 (element_name, "arch") == 0 ||
+ g_strcmp0 (element_name, "version") == 0 ||
+ g_strcmp0 (element_name, "checksum") == 0 ||
+ g_strcmp0 (element_name, "file") == 0 ||
+ g_strcmp0 (element_name, "time") == 0 ||
+ g_strcmp0 (element_name, "size") == 0 ||
+ g_strcmp0 (element_name, "rpm:license") == 0 ||
+ g_strcmp0 (element_name, "rpm:vendor") == 0 ||
+ g_strcmp0 (element_name, "rpm:group") == 0 ||
+ g_strcmp0 (element_name, "rpm:buildhost") == 0 ||
+ g_strcmp0 (element_name, "rpm:provides") == 0 ||
+ g_strcmp0 (element_name, "rpm:requires") == 0 ||
+ g_strcmp0 (element_name, "rpm:obsoletes") == 0 ||
+ g_strcmp0 (element_name, "rpm:sourcerpm") == 0 ||
+ g_strcmp0 (element_name, "rpm:header-range") == 0 ||
+ g_strcmp0 (element_name, "location") == 0 ||
+ g_strcmp0 (element_name, "format") == 0 ||
+ g_strcmp0 (element_name, "packager") == 0 ||
+ g_strcmp0 (element_name, "description") == 0 ||
+ g_strcmp0 (element_name, "url") == 0) {
+ primary_xml->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_UNKNOWN;
+ goto out;
+ }
+
+ egg_warning ("unhandled update end tag: %s", element_name);
+ goto out;
+ }
+
+ egg_warning ("unhandled end tag: %s", element_name);
+out:
+ g_free (package_id);
+ return;
+}
+
+/**
+ * zif_md_primary_xml_parser_text:
+ **/
+static void
+zif_md_primary_xml_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
+ gpointer user_data, GError **error)
+
+{
+ ZifMdPrimaryXml *primary_xml = user_data;
+ ZifString *string = NULL;
+
+ /* skip whitespace */
+ if (text_len < 1 || text[0] == ' ' || text[0] == '\t' || text[0] == '\n')
+ goto out;
+
+ /* group section */
+ if (primary_xml->priv->section == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE) {
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_UNKNOWN)
+ goto out;
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_NAME) {
+ primary_xml->priv->package_name_temp = g_strdup (text);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_ARCH) {
+ primary_xml->priv->package_arch_temp = g_strdup (text);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_SUMMARY) {
+ string = zif_string_new (text);
+ zif_package_set_summary (primary_xml->priv->package_temp, string);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_DESCRIPTION) {
+ string = zif_string_new (text);
+ zif_package_set_description (primary_xml->priv->package_temp, string);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_URL) {
+ string = zif_string_new (text);
+ zif_package_set_url (primary_xml->priv->package_temp, string);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_GROUP) {
+ string = zif_string_new (text);
+ zif_package_set_category (primary_xml->priv->package_temp, string);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_LICENCE) {
+ string = zif_string_new (text);
+ zif_package_set_license (primary_xml->priv->package_temp, string);
+ goto out;
+ }
+ if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_CHECKSUM) {
+ /* TODO: put in to the zif API? */
+ g_object_set_data_full (G_OBJECT(primary_xml->priv->package_temp), "pkgid", g_strdup (text), g_free);
+ goto out;
+ }
+ egg_error ("not saving: %s", text);
+ goto out;
+ }
+out:
+ if (string != NULL)
+ zif_string_unref (string);
+ return;
+}
+
+/**
+ * zif_md_primary_xml_load:
+ **/
+static gboolean
+zif_md_primary_xml_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ const gchar *filename;
+ gboolean ret;
+ gchar *contents = NULL;
+ gsize size;
+ ZifMdPrimaryXml *primary_xml = ZIF_MD_PRIMARY_XML (md);
+ GMarkupParseContext *context = NULL;
+ const GMarkupParser gpk_md_primary_xml_markup_parser = {
+ zif_md_primary_xml_parser_start_element,
+ zif_md_primary_xml_parser_end_element,
+ zif_md_primary_xml_parser_text,
+ NULL, /* passthrough */
+ NULL /* error */
+ };
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_XML (md), FALSE);
+
+ /* already loaded */
+ if (primary_xml->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for primary_xml");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+ ret = g_file_get_contents (filename, &contents, &size, error);
+ if (!ret)
+ goto out;
+
+ /* create parser */
+ context = g_markup_parse_context_new (&gpk_md_primary_xml_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, primary_xml, NULL);
+
+ /* parse data */
+ ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
+ if (!ret)
+ goto out;
+
+ /* we don't need to keep syncing */
+ primary_xml->priv->loaded = TRUE;
+out:
+ g_free (contents);
+ return primary_xml->priv->loaded;
+}
+
+typedef gboolean (*ZifPackageFilterFunc) (ZifPackage *package,
+ gpointer user_data);
+
+/**
+ * zif_md_primary_xml_filter:
+ **/
+static GPtrArray *
+zif_md_primary_xml_filter (ZifMd *md, ZifPackageFilterFunc filter_func, gpointer user_data,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ GPtrArray *packages;
+ ZifPackage *package;
+ guint i;
+ gboolean ret;
+ GError *error_local = NULL;
+ ZifCompletion *completion_local;
+ ZifMdPrimaryXml *md_primary = ZIF_MD_PRIMARY_XML (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_PRIMARY_XML (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* setup completion */
+ if (md_primary->priv->loaded)
+ zif_completion_set_number_steps (completion, 2);
+ else
+ zif_completion_set_number_steps (completion, 3);
+
+ /* if not already loaded, load */
+ if (!md_primary->priv->loaded) {
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load md_primary_xml file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+ }
+
+ /* search array */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ packages = md_primary->priv->array;
+ for (i=0; i<packages->len; i++) {
+ package = g_ptr_array_index (packages, i);
+ if (filter_func (package, user_data))
+ g_ptr_array_add (array, g_object_ref (package));
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ return array;
+}
+
+/**
+ * zif_md_primary_xml_resolve_cb:
+ **/
+static gboolean
+zif_md_primary_xml_resolve_cb (ZifPackage *package, gpointer user_data)
+{
+ const gchar *value;
+ const gchar *search = (const gchar *) user_data;
+ value = zif_package_get_name (package);
+ return (g_strcmp0 (value, search) == 0);
+}
+
+/**
+ * zif_md_primary_xml_resolve:
+ **/
+static GPtrArray *
+zif_md_primary_xml_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_resolve_cb, (gpointer) search,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_search_name_cb:
+ **/
+static gboolean
+zif_md_primary_xml_search_name_cb (ZifPackage *package, gpointer user_data)
+{
+ const gchar *value;
+ const gchar *search = (const gchar *) user_data;
+ value = zif_package_get_name (package);
+ return (g_strstr_len (value, -1, search) != NULL);
+}
+
+/**
+ * zif_md_primary_xml_search_name:
+ **/
+static GPtrArray *
+zif_md_primary_xml_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_name_cb, (gpointer) search,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_search_details_cb:
+ **/
+static gboolean
+zif_md_primary_xml_search_details_cb (ZifPackage *package, gpointer user_data)
+{
+ gboolean ret;
+ const gchar *value;
+ ZifString *string;
+ const gchar *search = (const gchar *) user_data;
+ value = zif_package_get_name (package);
+ ret = (g_strstr_len (value, -1, search) != NULL);
+ if (ret)
+ goto out;
+ string = zif_package_get_summary (package, NULL);
+ ret = (g_strstr_len (zif_string_get_value (string), -1, search) != NULL);
+ zif_string_unref (string);
+ if (ret)
+ goto out;
+ string = zif_package_get_description (package, NULL);
+ ret = (g_strstr_len (zif_string_get_value (string), -1, search) != NULL);
+ zif_string_unref (string);
+ if (ret)
+ goto out;
+out:
+ return ret;
+}
+
+/**
+ * zif_md_primary_xml_search_details:
+ **/
+static GPtrArray *
+zif_md_primary_xml_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_details_cb, (gpointer) search,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_search_group_cb:
+ **/
+static gboolean
+zif_md_primary_xml_search_group_cb (ZifPackage *package, gpointer user_data)
+{
+ gboolean ret;
+ ZifString *value;
+ const gchar *search = (const gchar *) user_data;
+ value = zif_package_get_category (package, NULL);
+ ret = (g_strstr_len (zif_string_get_value (value), -1, search) != NULL);
+ zif_string_unref (value);
+ return ret;
+}
+
+/**
+ * zif_md_primary_xml_search_group:
+ **/
+static GPtrArray *
+zif_md_primary_xml_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_group_cb, (gpointer) search,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_search_pkgid_cb:
+ **/
+static gboolean
+zif_md_primary_xml_search_pkgid_cb (ZifPackage *package, gpointer user_data)
+{
+ const gchar *value;
+ const gchar *search = (const gchar *) user_data;
+ value = (const gchar *) g_object_get_data (G_OBJECT (package), "pkgid");
+ return (g_strcmp0 (value, search) == 0);
+}
+
+/**
+ * zif_md_primary_xml_search_pkgid:
+ **/
+static GPtrArray *
+zif_md_primary_xml_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_pkgid_cb, (gpointer) search,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_what_provides_cb:
+ **/
+static gboolean
+zif_md_primary_xml_what_provides_cb (ZifPackage *package, gpointer user_data)
+{
+ gboolean ret;
+ GPtrArray *array;
+// const gchar *search = (const gchar *) user_data;
+ array = zif_package_get_provides (package, NULL);
+ /* TODO: do something with the ZifDepend objects */
+ ret = FALSE;
+ g_ptr_array_unref (array);
+ return ret;
+}
+
+/**
+ * zif_md_primary_xml_what_provides:
+ **/
+static GPtrArray *
+zif_md_primary_xml_what_provides (ZifMd *md, const gchar *search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_what_provides_cb, (gpointer) search,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_find_package_cb:
+ **/
+static gboolean
+zif_md_primary_xml_find_package_cb (ZifPackage *package, gpointer user_data)
+{
+ const gchar *value;
+ const gchar *search = (const gchar *) user_data;
+ value = zif_package_get_id (package);
+ return (g_strcmp0 (value, search) == 0);
+}
+
+/**
+ * zif_md_primary_xml_find_package:
+ **/
+static GPtrArray *
+zif_md_primary_xml_find_package (ZifMd *md, const gchar *package_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ return zif_md_primary_xml_filter (md, zif_md_primary_xml_find_package_cb, (gpointer) package_id,
+ cancellable, completion, error);
+}
+
+/**
+ * zif_md_primary_xml_get_packages:
+ **/
+static GPtrArray *
+zif_md_primary_xml_get_packages (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ ZifMdPrimaryXml *primary_xml = ZIF_MD_PRIMARY_XML (md);
+ return g_ptr_array_ref (primary_xml->priv->array);
+}
+
+/**
+ * zif_md_primary_xml_finalize:
+ **/
+static void
+zif_md_primary_xml_finalize (GObject *object)
+{
+ ZifMdPrimaryXml *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_PRIMARY_XML (object));
+ md = ZIF_MD_PRIMARY_XML (object);
+
+ g_ptr_array_unref (md->priv->array);
+
+ G_OBJECT_CLASS (zif_md_primary_xml_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_primary_xml_class_init:
+ **/
+static void
+zif_md_primary_xml_class_init (ZifMdPrimaryXmlClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_primary_xml_finalize;
+
+ /* map */
+ md_class->load = zif_md_primary_xml_load;
+ md_class->unload = zif_md_primary_xml_unload;
+ md_class->search_name = zif_md_primary_xml_search_name;
+ md_class->search_details = zif_md_primary_xml_search_details;
+ md_class->search_group = zif_md_primary_xml_search_group;
+ md_class->search_pkgid = zif_md_primary_xml_search_pkgid;
+ md_class->what_provides = zif_md_primary_xml_what_provides;
+ md_class->resolve = zif_md_primary_xml_resolve;
+ md_class->get_packages = zif_md_primary_xml_get_packages;
+ md_class->find_package = zif_md_primary_xml_find_package;
+
+ g_type_class_add_private (klass, sizeof (ZifMdPrimaryXmlPrivate));
+}
+
+/**
+ * zif_md_primary_xml_init:
+ **/
+static void
+zif_md_primary_xml_init (ZifMdPrimaryXml *md)
+{
+ md->priv = ZIF_MD_PRIMARY_XML_GET_PRIVATE (md);
+ md->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ md->priv->loaded = FALSE;
+ md->priv->section = ZIF_MD_PRIMARY_XML_SECTION_UNKNOWN;
+ md->priv->section_package = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_UNKNOWN;
+ md->priv->package_temp = NULL;
+}
+
+/**
+ * zif_md_primary_xml_new:
+ *
+ * Return value: A new #ZifMdPrimaryXml class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdPrimaryXml *
+zif_md_primary_xml_new (void)
+{
+ ZifMdPrimaryXml *md;
+ md = g_object_new (ZIF_TYPE_MD_PRIMARY_XML, NULL);
+ return ZIF_MD_PRIMARY_XML (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_primary_xml_test (EggTest *test)
+{
+ ZifMdPrimaryXml *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ ZifPackage *package;
+ ZifString *summary;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+
+ if (!egg_test_start (test, "ZifMdPrimaryXml"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get md_primary_xml md");
+ md = zif_md_primary_xml_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_PRIMARY_XML);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum compressed");
+ ret = zif_md_set_checksum (ZIF_MD (md), "33a0eed8e12f445618756b18aa49d05ee30069d280d37b03a7a15d1ec954f833");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "52e4c37b13b4b23ae96432962186e726550b19e93cf3cbf7bf55c2a673a20086");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/primary.xml.gz");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "search for files");
+ zif_completion_reset (completion);
+ array = zif_md_primary_xml_resolve (md, "gnome-power-manager", cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ egg_test_assert (test, array->len == 1);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ package = g_ptr_array_index (array, 0);
+ summary = zif_package_get_summary (package, NULL);
+ if (g_strcmp0 (zif_string_get_value (summary), "GNOME power management service") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct summary '%s'", zif_string_get_value (summary));
+ zif_string_unref (summary);
+ g_ptr_array_unref (array);
+
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+ g_object_unref (md);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-primary-xml.h b/backends/yum/libzif/zif-md-primary-xml.h
new file mode 100644
index 0000000..2b38406
--- /dev/null
+++ b/backends/yum/libzif/zif-md-primary-xml.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_PRIMARY_XML_H
+#define __ZIF_MD_PRIMARY_XML_H
+
+#include <glib-object.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_PRIMARY_XML (zif_md_primary_xml_get_type ())
+#define ZIF_MD_PRIMARY_XML(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_PRIMARY_XML, ZifMdPrimaryXml))
+#define ZIF_MD_PRIMARY_XML_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_PRIMARY_XML, ZifMdPrimaryXmlClass))
+#define ZIF_IS_MD_PRIMARY_XML(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_PRIMARY_XML))
+#define ZIF_IS_MD_PRIMARY_XML_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_PRIMARY_XML))
+#define ZIF_MD_PRIMARY_XML_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_PRIMARY_XML, ZifMdPrimaryXmlClass))
+
+typedef struct _ZifMdPrimaryXml ZifMdPrimaryXml;
+typedef struct _ZifMdPrimaryXmlPrivate ZifMdPrimaryXmlPrivate;
+typedef struct _ZifMdPrimaryXmlClass ZifMdPrimaryXmlClass;
+
+struct _ZifMdPrimaryXml
+{
+ ZifMd parent;
+ ZifMdPrimaryXmlPrivate *priv;
+};
+
+struct _ZifMdPrimaryXmlClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_primary_xml_get_type (void);
+ZifMdPrimaryXml *zif_md_primary_xml_new (void);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_PRIMARY_XML_H */
+
diff --git a/backends/yum/libzif/zif-md-updateinfo.c b/backends/yum/libzif/zif-md-updateinfo.c
new file mode 100644
index 0000000..8e9c3ee
--- /dev/null
+++ b/backends/yum/libzif/zif-md-updateinfo.c
@@ -0,0 +1,763 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-updateinfo
+ * @short_description: Updateinfo metadata functionality
+ *
+ * Provide access to the updateinfo repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <glib.h>
+
+#include "zif-md.h"
+#include "zif-md-updateinfo.h"
+#include "zif-update.h"
+#include "zif-update-info.h"
+#include "zif-utils.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_UPDATEINFO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_UPDATEINFO, ZifMdUpdateinfoPrivate))
+
+typedef enum {
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE,
+ ZIF_MD_UPDATEINFO_SECTION_UNKNOWN
+} ZifMdUpdateinfoSection;
+
+typedef enum {
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_ID,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_TITLE,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_DESCRIPTION,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_ISSUED,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_REFERENCES,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN
+} ZifMdUpdateinfoSectionGroup;
+
+typedef enum {
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST_PACKAGE,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST_FILENAME,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST_UNKNOWN
+} ZifMdUpdateinfoSectionUpdatePkglistType;
+
+/**
+ * ZifMdUpdateinfoPrivate:
+ *
+ * Private #ZifMdUpdateinfo data
+ **/
+struct _ZifMdUpdateinfoPrivate
+{
+ gboolean loaded;
+ GPtrArray *array_updates; /* stored as ZifUpdate */
+ /* for parser */
+ ZifMdUpdateinfoSection section;
+ ZifMdUpdateinfoSectionGroup section_group;
+ ZifMdUpdateinfoSectionUpdatePkglistType section_group_type;
+ ZifUpdate *update_temp;
+ ZifUpdateInfo *update_info_temp;
+ ZifPackage *package_temp;
+};
+
+G_DEFINE_TYPE (ZifMdUpdateinfo, zif_md_updateinfo, ZIF_TYPE_MD)
+
+/**
+ * zif_md_updateinfo_parser_start_element:
+ **/
+static void
+zif_md_updateinfo_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
+{
+ guint i;
+ ZifMdUpdateinfo *updateinfo = user_data;
+
+ g_return_if_fail (ZIF_IS_MD_UPDATEINFO (updateinfo));
+
+ /* group element */
+ if (updateinfo->priv->section == ZIF_MD_UPDATEINFO_SECTION_UNKNOWN) {
+
+ /* start of list */
+ if (g_strcmp0 (element_name, "updates") == 0)
+ goto out;
+
+ /* start of update */
+ if (g_strcmp0 (element_name, "update") == 0) {
+ updateinfo->priv->section = ZIF_MD_UPDATEINFO_SECTION_UPDATE;
+ updateinfo->priv->update_temp = zif_update_new ();
+
+ /* find the update type as a bonus */
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "status") == 0) {
+ zif_update_set_state (updateinfo->priv->update_temp,
+ pk_update_state_enum_from_string (attribute_values[i]));
+ }
+ if (g_strcmp0 (element_name, "type") == 0) {
+ zif_update_set_kind (updateinfo->priv->update_temp,
+ pk_info_enum_from_string (attribute_values[i]));
+ }
+ }
+ goto out;
+ }
+
+ egg_warning ("unhandled element: %s", element_name);
+
+ goto out;
+ }
+
+ /* update element */
+ if (updateinfo->priv->section == ZIF_MD_UPDATEINFO_SECTION_UPDATE) {
+
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN) {
+ if (g_strcmp0 (element_name, "release") == 0)
+ goto out;
+ if (g_strcmp0 (element_name, "id") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_ID;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "title") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_TITLE;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "description") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_DESCRIPTION;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "issued") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_ISSUED;
+
+ /* find the issued date */
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "date") == 0) {
+ zif_update_set_issued (updateinfo->priv->update_temp, attribute_values[i]);
+ }
+ }
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "references") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_REFERENCES;
+ goto out;
+ }
+ if (g_strcmp0 (element_name, "pkglist") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST;
+ goto out;
+ }
+ egg_warning ("unhandled update base tag: %s", element_name);
+ goto out;
+
+ } else if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_REFERENCES) {
+ if (g_strcmp0 (element_name, "reference") == 0) {
+ updateinfo->priv->update_info_temp = zif_update_info_new ();
+
+ /* find the details about the info */
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "href") == 0) {
+ zif_update_info_set_url (updateinfo->priv->update_info_temp,
+ attribute_values[i]);
+ }
+ if (g_strcmp0 (attribute_names[i], "title") == 0) {
+ zif_update_info_set_title (updateinfo->priv->update_info_temp,
+ attribute_values[i]);
+ }
+ if (g_strcmp0 (attribute_names[i], "type") == 0) {
+ zif_update_info_set_kind (updateinfo->priv->update_info_temp,
+ zif_update_info_kind_from_string (attribute_values[i]));
+ }
+ }
+
+ goto out;
+ }
+
+ egg_warning ("unhandled references tag: %s", element_name);
+ goto out;
+
+ } else if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST) {
+ if (g_strcmp0 (element_name, "collection") == 0)
+ goto out;
+ if (g_strcmp0 (element_name, "name") == 0)
+ goto out;
+ //TODO: is this better than src?
+ if (g_strcmp0 (element_name, "filename") == 0)
+ goto out;
+
+ if (g_strcmp0 (element_name, "package") == 0) {
+ const gchar *name = NULL;
+ guint epoch = 0;
+ const gchar *version = NULL;
+ const gchar *release = NULL;
+ const gchar *arch = NULL;
+ const gchar *src = NULL;
+ const gchar *data;
+ gchar *package_id;
+ ZifString *string;
+
+ updateinfo->priv->package_temp = zif_package_new ();
+
+ /* find the details about the package */
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "name") == 0)
+ name = attribute_values[i];
+ else if (g_strcmp0 (attribute_names[i], "epoch") == 0)
+ epoch = atoi (attribute_values[i]);
+ else if (g_strcmp0 (attribute_names[i], "version") == 0)
+ version = attribute_values[i];
+ else if (g_strcmp0 (attribute_names[i], "release") == 0)
+ release = attribute_values[i];
+ else if (g_strcmp0 (attribute_names[i], "arch") == 0)
+ arch = attribute_values[i];
+ else if (g_strcmp0 (attribute_names[i], "src") == 0)
+ src = attribute_values[i];
+ }
+
+ /* create a package from what we know */
+ data = zif_md_get_id (ZIF_MD (updateinfo));
+ package_id = zif_package_id_from_nevra (name, epoch, version, release, arch, data);
+ zif_package_set_id (updateinfo->priv->package_temp, package_id);
+ string = zif_string_new (src);
+ zif_package_set_location_href (updateinfo->priv->package_temp, string);
+ g_free (package_id);
+ zif_string_unref (string);
+ goto out;
+ }
+
+ egg_warning ("unexpected pklist tag: %s", element_name);
+ }
+
+ egg_warning ("unexpected update tag: %s", element_name);
+ }
+
+ egg_warning ("unhandled base tag: %s", element_name);
+
+out:
+ return;
+}
+
+/**
+ * zif_md_updateinfo_parser_end_element:
+ **/
+static void
+zif_md_updateinfo_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
+ gpointer user_data, GError **error)
+{
+ ZifMdUpdateinfo *updateinfo = user_data;
+
+ /* no element */
+ if (updateinfo->priv->section == ZIF_MD_UPDATEINFO_SECTION_UNKNOWN) {
+
+ /* end of list */
+ if (g_strcmp0 (element_name, "updates") == 0)
+ goto out;
+
+ egg_warning ("unhandled base end tag: %s", element_name);
+ }
+
+ /* update element */
+ if (updateinfo->priv->section == ZIF_MD_UPDATEINFO_SECTION_UPDATE) {
+
+ /* end of update */
+ if (g_strcmp0 (element_name, "update") == 0) {
+ updateinfo->priv->section = ZIF_MD_UPDATEINFO_SECTION_UNKNOWN;
+
+ /* add to array */
+ g_ptr_array_add (updateinfo->priv->array_updates, updateinfo->priv->update_temp);
+ updateinfo->priv->update_temp = NULL;
+ goto out;
+ }
+
+ if (g_strcmp0 (element_name, "id") == 0 ||
+ g_strcmp0 (element_name, "title") == 0 ||
+ g_strcmp0 (element_name, "release") == 0 ||
+ g_strcmp0 (element_name, "description") == 0 ||
+ g_strcmp0 (element_name, "issued") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN;
+ goto out;
+ }
+
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_REFERENCES) {
+
+ if (g_strcmp0 (element_name, "references") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN;
+ goto out;
+ }
+
+ if (g_strcmp0 (element_name, "reference") == 0) {
+ zif_update_add_update_info (updateinfo->priv->update_temp,
+ updateinfo->priv->update_info_temp);
+ g_object_unref (updateinfo->priv->update_info_temp);
+ updateinfo->priv->update_info_temp = NULL;
+ goto out;
+ }
+ egg_warning ("unhandled references end tag: %s", element_name);
+ goto out;
+ }
+
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST) {
+
+ if (g_strcmp0 (element_name, "pkglist") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN;
+ goto out;
+ }
+
+ if (g_strcmp0 (element_name, "name") == 0)
+ goto out;
+ if (g_strcmp0 (element_name, "filename") == 0)
+ goto out;
+ if (g_strcmp0 (element_name, "collection") == 0)
+ goto out;
+
+ /* add to the update */
+ if (g_strcmp0 (element_name, "package") == 0) {
+ zif_update_add_package (updateinfo->priv->update_temp,
+ updateinfo->priv->package_temp);
+ g_object_unref (updateinfo->priv->package_temp);
+ updateinfo->priv->package_temp = NULL;
+ goto out;
+ }
+
+ egg_warning ("unhandled pkglist end tag: %s", element_name);
+ }
+
+ egg_warning ("unhandled update end tag: %s", element_name);
+ goto out;
+ }
+
+ egg_warning ("unhandled end tag: %s", element_name);
+out:
+ return;
+}
+
+/**
+ * zif_md_updateinfo_parser_text:
+ **/
+static void
+zif_md_updateinfo_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
+ gpointer user_data, GError **error)
+
+{
+ ZifMdUpdateinfo *updateinfo = user_data;
+
+ /* skip whitespace */
+ if (text_len < 1 || text[0] == ' ' || text[0] == '\t' || text[0] == '\n')
+ goto out;
+
+ /* group section */
+ if (updateinfo->priv->section == ZIF_MD_UPDATEINFO_SECTION_UPDATE) {
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_ID) {
+ zif_update_set_id (updateinfo->priv->update_temp, text);
+ goto out;
+ }
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_TITLE) {
+ zif_update_set_title (updateinfo->priv->update_temp, text);
+ goto out;
+ }
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_DESCRIPTION) {
+ zif_update_set_description (updateinfo->priv->update_temp, text);
+ goto out;
+ }
+ goto out;
+ }
+out:
+ return;
+}
+
+/**
+ * zif_md_updateinfo_unload:
+ **/
+static gboolean
+zif_md_updateinfo_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_updateinfo_load:
+ **/
+static gboolean
+zif_md_updateinfo_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = TRUE;
+ gchar *contents = NULL;
+ const gchar *filename;
+ gsize size;
+ GMarkupParseContext *context = NULL;
+ const GMarkupParser gpk_md_updateinfo_markup_parser = {
+ zif_md_updateinfo_parser_start_element,
+ zif_md_updateinfo_parser_end_element,
+ zif_md_updateinfo_parser_text,
+ NULL, /* passthrough */
+ NULL /* error */
+ };
+ ZifMdUpdateinfo *updateinfo = ZIF_MD_UPDATEINFO (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_UPDATEINFO (md), FALSE);
+
+ /* already loaded */
+ if (updateinfo->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for updateinfo");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+
+ /* get repo contents */
+ ret = g_file_get_contents (filename, &contents, &size, error);
+ if (!ret)
+ goto out;
+
+ /* create parser */
+ context = g_markup_parse_context_new (&gpk_md_updateinfo_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, updateinfo, NULL);
+
+ /* parse data */
+ ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
+ if (!ret)
+ goto out;
+
+ updateinfo->priv->loaded = TRUE;
+out:
+ if (context != NULL)
+ g_markup_parse_context_free (context);
+ g_free (contents);
+ return ret;
+}
+
+/**
+ * zif_md_updateinfo_get_detail:
+ * @md: the #ZifMdUpdateinfo object
+ * @cancellable: the %GCancellable, or %NULL
+ * @completion: the %ZifCompletion object
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets all the available update data.
+ *
+ * Return value: #GPtrArray of #ZifUpdate's, free with g_ptr_array_unref()
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_updateinfo_get_detail (ZifMdUpdateinfo *md,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ gboolean ret;
+ GError *error_local = NULL;
+
+ g_return_val_if_fail (ZIF_IS_MD_UPDATEINFO (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get load updateinfo: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ array = g_ptr_array_ref (md->priv->array_updates);
+out:
+ return array;
+}
+
+/**
+ * zif_md_updateinfo_get_detail_for_package:
+ * @md: the #ZifMdUpdateinfo object
+ * @package_id: the group to search for
+ * @cancellable: the %GCancellable, or %NULL
+ * @completion: the %ZifCompletion object
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the list of update details for the package_id.
+ *
+ * Return value: #GPtrArray of #ZifUpdate's, free with g_ptr_array_unref()
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_updateinfo_get_detail_for_package (ZifMdUpdateinfo *md, const gchar *package_id,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ GPtrArray *array_tmp;
+ guint i;
+ guint j;
+ guint len;
+ gboolean ret;
+ GError *error_local = NULL;
+ ZifUpdate *update;
+ ZifPackage *package;
+
+ g_return_val_if_fail (ZIF_IS_MD_UPDATEINFO (md), NULL);
+ g_return_val_if_fail (package_id != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!md->priv->loaded) {
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to get load updateinfo: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get packages in this group */
+ len = md->priv->array_updates->len;
+ for (i=0; i<len; i++) {
+ update = g_ptr_array_index (md->priv->array_updates, i);
+
+ /* have we matched on any entries */
+ ret = FALSE;
+
+ array_tmp = zif_update_get_packages (update);
+ for (j=0; j<array_tmp->len; j++) {
+ package = g_ptr_array_index (array_tmp, j);
+ if (g_strcmp0 (zif_package_get_id (package), package_id) == 0) {
+ ret = TRUE;
+ break;
+ }
+ }
+
+ /* we found a package match */
+ if (ret) {
+ if (array == NULL)
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ g_ptr_array_add (array, g_object_ref (update));
+ }
+ }
+
+ /* nothing found */
+ if (array == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "could not find package: %s", package_id);
+ }
+out:
+ return array;
+}
+
+/**
+ * zif_md_updateinfo_finalize:
+ **/
+static void
+zif_md_updateinfo_finalize (GObject *object)
+{
+ ZifMdUpdateinfo *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_UPDATEINFO (object));
+ md = ZIF_MD_UPDATEINFO (object);
+
+ g_ptr_array_unref (md->priv->array_updates);
+
+ G_OBJECT_CLASS (zif_md_updateinfo_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_updateinfo_class_init:
+ **/
+static void
+zif_md_updateinfo_class_init (ZifMdUpdateinfoClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_updateinfo_finalize;
+
+ /* map */
+ md_class->load = zif_md_updateinfo_load;
+ md_class->unload = zif_md_updateinfo_unload;
+ g_type_class_add_private (klass, sizeof (ZifMdUpdateinfoPrivate));
+}
+
+/**
+ * zif_md_updateinfo_init:
+ **/
+static void
+zif_md_updateinfo_init (ZifMdUpdateinfo *md)
+{
+ md->priv = ZIF_MD_UPDATEINFO_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->section = ZIF_MD_UPDATEINFO_SECTION_UNKNOWN;
+ md->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN;
+ md->priv->section_group_type = ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST_UNKNOWN;
+ md->priv->update_temp = NULL;
+ md->priv->update_info_temp = NULL;
+ md->priv->package_temp = NULL;
+ md->priv->array_updates = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+}
+
+/**
+ * zif_md_updateinfo_new:
+ *
+ * Return value: A new #ZifMdUpdateinfo class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdUpdateinfo *
+zif_md_updateinfo_new (void)
+{
+ ZifMdUpdateinfo *md;
+ md = g_object_new (ZIF_TYPE_MD_UPDATEINFO, NULL);
+ return ZIF_MD_UPDATEINFO (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_updateinfo_test (EggTest *test)
+{
+ ZifMdUpdateinfo *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ const gchar *id;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ ZifUpdate *update;
+
+ if (!egg_test_start (test, "ZifMdUpdateinfo"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get md_updateinfo md");
+ md = zif_md_updateinfo_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_UPDATEINFO);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/updateinfo.xml");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "4fa3657a79af078c588e2ab181ab0a3a156c6008a084d85edccaf6c57d67d47d");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "get categories");
+ array = zif_md_updateinfo_get_detail_for_package (md, "device-mapper-libs;1.02.27-7.fc10;ppc64;fedora", cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get categories '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len == 1)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "incorrect value %i", array->len);
+
+ /************************************************************/
+ egg_test_title (test, "correct id value");
+ update = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (zif_update_get_id (update), "FEDORA-2008-9969") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct id '%s'", zif_update_get_id (update));
+
+ /************************************************************/
+ egg_test_title (test, "correct title value");
+ update = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (zif_update_get_title (update), "lvm2-2.02.39-7.fc10") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct title '%s'", zif_update_get_title (update));
+
+ /************************************************************/
+ egg_test_title (test, "correct description value");
+ update = g_ptr_array_index (array, 0);
+ if (g_strcmp0 (zif_update_get_description (update), "Fix an incorrect path that prevents the clvmd init script from working and include licence files with the sub-packages.") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct id '%s'", zif_update_get_description (update));
+
+ g_ptr_array_unref (array);
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-updateinfo.h b/backends/yum/libzif/zif-md-updateinfo.h
new file mode 100644
index 0000000..38e708d
--- /dev/null
+++ b/backends/yum/libzif/zif-md-updateinfo.h
@@ -0,0 +1,73 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_UPDATEINFO_H
+#define __ZIF_MD_UPDATEINFO_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_UPDATEINFO (zif_md_updateinfo_get_type ())
+#define ZIF_MD_UPDATEINFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_UPDATEINFO, ZifMdUpdateinfo))
+#define ZIF_MD_UPDATEINFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_UPDATEINFO, ZifMdUpdateinfoClass))
+#define ZIF_IS_MD_UPDATEINFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_UPDATEINFO))
+#define ZIF_IS_MD_UPDATEINFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_UPDATEINFO))
+#define ZIF_MD_UPDATEINFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_UPDATEINFO, ZifMdUpdateinfoClass))
+
+typedef struct _ZifMdUpdateinfo ZifMdUpdateinfo;
+typedef struct _ZifMdUpdateinfoPrivate ZifMdUpdateinfoPrivate;
+typedef struct _ZifMdUpdateinfoClass ZifMdUpdateinfoClass;
+
+struct _ZifMdUpdateinfo
+{
+ ZifMd parent;
+ ZifMdUpdateinfoPrivate *priv;
+};
+
+struct _ZifMdUpdateinfoClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_updateinfo_get_type (void);
+ZifMdUpdateinfo *zif_md_updateinfo_new (void);
+
+GPtrArray *zif_md_updateinfo_get_detail (ZifMdUpdateinfo *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_updateinfo_get_detail_for_package (ZifMdUpdateinfo *md,
+ const gchar *package_id,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_UPDATEINFO_H */
+
diff --git a/backends/yum/libzif/zif-md.c b/backends/yum/libzif/zif-md.c
new file mode 100644
index 0000000..e85f2e0
--- /dev/null
+++ b/backends/yum/libzif/zif-md.c
@@ -0,0 +1,1242 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md
+ * @short_description: Metadata file common functionality
+ *
+ * This provides an abstract metadata class.
+ * It is implemented by #ZifMdFilelists, #ZifMdMaster and #ZifMdPrimary.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "zif-utils.h"
+#include "zif-md.h"
+#include "zif-config.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD, ZifMdPrivate))
+
+/**
+ * ZifMdPrivate:
+ *
+ * Private #ZifMd data
+ **/
+struct _ZifMdPrivate
+{
+ gboolean loaded;
+ gchar *id; /* fedora */
+ gchar *filename; /* /var/cache/yum/fedora/repo.sqlite.bz2 */
+ gchar *filename_uncompressed; /* /var/cache/yum/fedora/repo.sqlite */
+ guint timestamp;
+ gchar *location; /* repodata/35d817e-primary.sqlite.bz2 */
+ gchar *checksum; /* of compressed file */
+ gchar *checksum_uncompressed; /* of uncompressed file */
+ GChecksumType checksum_type;
+ ZifMdType type;
+ ZifStoreRemote *remote;
+ ZifConfig *config;
+};
+
+G_DEFINE_TYPE (ZifMd, zif_md, G_TYPE_OBJECT)
+
+/**
+ * zif_md_error_quark:
+ *
+ * Return value: Our personal error quark.
+ *
+ * Since: 0.0.1
+ **/
+GQuark
+zif_md_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("zif_md_error");
+ return quark;
+}
+
+/**
+ * zif_md_get_id:
+ * @md: the #ZifMd object
+ *
+ * Gets the md identifier, usually the repo name.
+ *
+ * Return value: the repo id.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_md_get_id (ZifMd *md)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ return md->priv->id;
+}
+
+/**
+ * zif_md_get_filename:
+ * @md: the #ZifMd object
+ *
+ * Gets the compressed filename of the repo.
+ *
+ * Return value: the filename
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_md_get_filename (ZifMd *md)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ return md->priv->filename;
+}
+
+/**
+ * zif_md_get_location:
+ * @md: the #ZifMd object
+ *
+ * Gets the location of the repo.
+ *
+ * Return value: the location
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_md_get_location (ZifMd *md)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ return md->priv->location;
+}
+
+/**
+ * zif_md_get_mdtype:
+ * @md: the #ZifMd object
+ *
+ * Gets the type of the repo.
+ *
+ * Return value: the type
+ *
+ * Since: 0.0.1
+ **/
+ZifMdType
+zif_md_get_mdtype (ZifMd *md)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), ZIF_MD_TYPE_UNKNOWN);
+ return md->priv->type;
+}
+
+/**
+ * zif_md_get_filename_uncompressed:
+ * @md: the #ZifMd object
+ *
+ * Gets the uncompressed filename of the repo.
+ *
+ * Return value: the filename
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_md_get_filename_uncompressed (ZifMd *md)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ return md->priv->filename_uncompressed;
+}
+
+/**
+ * zif_md_set_filename:
+ * @md: the #ZifMd object
+ * @filename: the base filename, e.g. "master.xml.bz2"
+ *
+ * Sets the filename of the compressed file.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_filename (ZifMd *md, const gchar *filename)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->filename == NULL, FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
+
+ /* this is the compressed name */
+ md->priv->filename = g_strdup (filename);
+
+ /* this is the uncompressed name */
+ md->priv->filename_uncompressed = zif_file_get_uncompressed_name (filename);
+
+ return TRUE;
+}
+
+/**
+ * zif_md_set_timestamp:
+ * @md: the #ZifMd object
+ * @timestamp: the timestamp value
+ *
+ * Sets the timestamp of the compressed file.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_timestamp (ZifMd *md, guint timestamp)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->timestamp == 0, FALSE);
+ g_return_val_if_fail (timestamp != 0, FALSE);
+
+ /* save new value */
+ md->priv->timestamp = timestamp;
+ return TRUE;
+}
+
+/**
+ * zif_md_set_location:
+ * @md: the #ZifMd object
+ * @location: the location
+ *
+ * Sets the location of the compressed file, e.g. "repodata/35d817e-primary.sqlite.bz2"
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_location (ZifMd *md, const gchar *location)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->location == NULL, FALSE);
+ g_return_val_if_fail (location != NULL, FALSE);
+
+ /* save new value */
+ md->priv->location = g_strdup (location);
+ return TRUE;
+}
+
+/**
+ * zif_md_set_checksum:
+ * @md: the #ZifMd object
+ * @checksum: the checksum value
+ *
+ * Sets the checksum of the compressed file.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_checksum (ZifMd *md, const gchar *checksum)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->checksum == NULL, FALSE);
+ g_return_val_if_fail (checksum != NULL, FALSE);
+
+ /* save new value */
+ md->priv->checksum = g_strdup (checksum);
+ return TRUE;
+}
+
+/**
+ * zif_md_set_checksum_uncompressed:
+ * @md: the #ZifMd object
+ * @checksum_uncompressed: the uncompressed checksum value
+ *
+ * Sets the checksum of the uncompressed file.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_checksum_uncompressed (ZifMd *md, const gchar *checksum_uncompressed)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->checksum_uncompressed == NULL, FALSE);
+ g_return_val_if_fail (checksum_uncompressed != NULL, FALSE);
+
+ /* save new value */
+ md->priv->checksum_uncompressed = g_strdup (checksum_uncompressed);
+ return TRUE;
+}
+
+/**
+ * zif_md_set_checksum_type:
+ * @md: the #ZifMd object
+ * @checksum_type: the checksum type
+ *
+ * Sets the checksum_type of the files.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_checksum_type (ZifMd *md, GChecksumType checksum_type)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->checksum_type == 0, FALSE);
+
+ /* save new value */
+ md->priv->checksum_type = checksum_type;
+ return TRUE;
+}
+
+/**
+ * zif_md_set_mdtype:
+ * @md: the #ZifMd object
+ * @type: the metadata type
+ *
+ * Sets the type of the metadata, e.g. ZIF_MD_TYPE_FILELISTS_SQL.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_mdtype (ZifMd *md, ZifMdType type)
+{
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->type == ZIF_MD_TYPE_UNKNOWN, FALSE);
+ g_return_val_if_fail (type != ZIF_MD_TYPE_UNKNOWN, FALSE);
+
+ /* save new value */
+ md->priv->type = type;
+
+ /* metalink is not specified in the repomd.xml file */
+ if (type == ZIF_MD_TYPE_METALINK) {
+ zif_md_set_location (md, "metalink.xml");
+ goto out;
+ }
+
+ /* mirrorlist is not specified in the repomd.xml file */
+ if (type == ZIF_MD_TYPE_MIRRORLIST) {
+ zif_md_set_location (md, "mirrorlist.txt");
+ goto out;
+ }
+
+ /* check we've got the needed data */
+ if (md->priv->location != NULL && (md->priv->checksum == NULL || md->priv->timestamp == 0)) {
+ egg_warning ("cannot load md for %s (loc=%s, checksum=%s, checksum_open=%s, timestamp=%i)",
+ zif_md_type_to_text (type), md->priv->location,
+ md->priv->checksum, md->priv->checksum_uncompressed, md->priv->timestamp);
+ ret = FALSE;
+ goto out;
+ }
+out:
+ return ret;
+}
+
+/**
+ * zif_md_set_id:
+ * @md: the #ZifMd object
+ * @id: the repository id, e.g. "fedora"
+ *
+ * Sets the repository ID for this metadata.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_id (ZifMd *md, const gchar *id)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->id == NULL, FALSE);
+ g_return_val_if_fail (id != NULL, FALSE);
+
+ md->priv->id = g_strdup (id);
+ return TRUE;
+}
+
+/**
+ * zif_md_set_id:
+ * @md: the #ZifMd object
+ * @id: the repository id, e.g. "fedora"
+ *
+ * Sets the repository ID for this metadata.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_set_store_remote (ZifMd *md, ZifStoreRemote *remote)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->remote == NULL, FALSE);
+ g_return_val_if_fail (remote != NULL, FALSE);
+
+ /* do not take a reference, else the parent device never goes away */
+ md->priv->remote = remote;
+ return TRUE;
+}
+
+/**
+ * zif_md_delete_file:
+ **/
+static gboolean
+zif_md_delete_file (const gchar *filename)
+{
+ gint retval;
+ gboolean ret;
+
+ /* file exists? */
+ ret = g_file_test (filename, G_FILE_TEST_EXISTS);
+ if (!ret)
+ goto out;
+
+ egg_warning ("deleting %s", filename);
+
+ /* remove */
+ retval = g_unlink (filename);
+ if (retval != 0) {
+ egg_warning ("failed to delete %s", filename);
+ ret = FALSE;
+ }
+out:
+ return ret;
+}
+
+/**
+ * zif_md_load:
+ * @md: the #ZifMd object
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Load the metadata store.
+ *
+ * - Check compressed file
+ * if invalid:
+ * delete_it()
+ * if online:
+ * download_it()
+ * if failure:
+ * abort
+ * check_it()
+ * if failure:
+ * abort
+ * else
+ * abort
+ *
+ * - Check uncompressed file
+ * if invalid:
+ * delete_it()
+ * decompress_it()
+ * if failure:
+ * abort()
+ * check_it()
+ * if failure:
+ * abort
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret;
+ gboolean uncompressed_check;
+ gchar *dirname = NULL;
+ GError *error_local = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+ ZifCompletion *completion_local;
+
+ /* no support */
+ if (klass->load == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ return FALSE;
+ }
+
+ /* setup completion */
+ zif_completion_set_number_steps (completion, 3);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+
+ /* optimise: if uncompressed file is okay, then don't even check the compressed file */
+ uncompressed_check = zif_md_file_check (md, TRUE, &error_local);
+ if (uncompressed_check) {
+ zif_completion_done (completion);
+ goto skip_compressed_check;
+ }
+
+ /* display any warning */
+ egg_warning ("failed checksum for uncompressed: %s", error_local->message);
+ g_clear_error (&error_local);
+
+ /* check compressed file */
+ ret = zif_md_file_check (md, FALSE, &error_local);
+ if (!ret) {
+
+ /* this one really is fatal */
+ if (g_strstr_len (error_local->message, -1, "no filename") != NULL) {
+ g_propagate_error (error, error_local);
+ goto out;
+ }
+
+ egg_warning ("failed checksum for compressed: %s", error_local->message);
+ g_clear_error (&error_local);
+
+ /* delete file if it exists */
+ zif_md_delete_file (md->priv->filename);
+
+ /* if not online, then this is fatal */
+ ret = zif_config_get_boolean (md->priv->config, "network", NULL);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_AS_OFFLINE,
+ "failed to check %s checksum for %s and offline",
+ zif_md_type_to_text (md->priv->type), md->priv->id);
+ goto out;
+ }
+
+ /* download file */
+ completion_local = zif_completion_get_child (completion);
+ dirname = g_path_get_dirname (md->priv->filename);
+ ret = zif_store_remote_download (md->priv->remote, md->priv->location, dirname, cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_DOWNLOAD,
+ "failed to download missing compressed file: %s", error_local->message);
+ goto out;
+ }
+
+ /* check newly downloaded compressed file */
+ ret = zif_md_file_check (md, FALSE, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed checksum on downloaded file: %s", error_local->message);
+ goto out;
+ }
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* check uncompressed file */
+ if (!uncompressed_check) {
+
+ /* delete file if it exists */
+ zif_md_delete_file (md->priv->filename_uncompressed);
+
+ /* decompress file */
+ egg_debug ("decompressing file");
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_file_decompress (md->priv->filename, md->priv->filename_uncompressed,
+ cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to decompress: %s", error_local->message);
+ goto out;
+ }
+
+ /* check newly uncompressed file */
+ ret = zif_md_file_check (md, TRUE, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed checksum on decompressed file: %s", error_local->message);
+ goto out;
+ }
+ }
+
+skip_compressed_check:
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* do subclassed load */
+ completion_local = zif_completion_get_child (completion);
+ ret = klass->load (md, cancellable, completion_local, error);
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ g_free (dirname);
+ return ret;
+}
+
+/**
+ * zif_md_unload:
+ * @md: the #ZifMd object
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Unload the metadata store.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* no support */
+ if (klass->unload == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ return FALSE;
+ }
+
+ return klass->unload (md, cancellable, completion, error);
+}
+
+/**
+ * zif_md_resolve:
+ * @md: the #ZifMd object
+ * @search: the search term, e.g. "gnome-power-manager"
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all remote packages that match the name exactly.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->resolve == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->resolve (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_search_name:
+ * @md: the #ZifMd object
+ * @search: the search term, e.g. "power"
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all packages that match the name.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->search_name == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->search_name (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_search_details:
+ * @md: the #ZifMd object
+ * @search: the search term, e.g. "advanced"
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all packages that match the name or description.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->search_details == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->search_details (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_search_group:
+ * @md: the #ZifMd object
+ * @search: the search term, e.g. "games/console"
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all packages that match the group.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->search_group == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->search_group (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_search_pkgid:
+ * @md: the #ZifMd object
+ * @search: the search term as a 64 bit hash
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all packages that match the given pkgId.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->search_pkgid == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->search_pkgid (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_what_provides:
+ * @md: the #ZifMd object
+ * @search: the provide, e.g. "mimehandler(application/ogg)"
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all packages that match the given provide.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_what_provides (ZifMd *md, const gchar *search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->what_provides == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->what_provides (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_find_package:
+ * @md: the #ZifMd object
+ * @package_id: the PackageId to match
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Finds all packages that match PackageId.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_find_package (ZifMd *md, const gchar *package_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->find_package == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->find_package (md, package_id, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_get_packages:
+ * @md: the #ZifMd object
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Returns all packages in the repo.
+ *
+ * Return value: an array of #ZifPackageRemote's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_get_packages (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->get_packages == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+
+ /* do subclassed action */
+ array = klass->get_packages (md, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
+ * zif_md_clean:
+ * @md: the #ZifMd object
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Clean the metadata store.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_clean (ZifMd *md, GError **error)
+{
+ gboolean ret = FALSE;
+ gboolean exists;
+ const gchar *filename;
+ GFile *file;
+ GError *error_local = NULL;
+
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* get filename */
+ filename = zif_md_get_filename (md);
+ if (filename == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for %s", zif_md_type_to_text (md->priv->type));
+ ret = FALSE;
+ goto out;
+ }
+
+ /* file does not exist */
+ exists = g_file_test (filename, G_FILE_TEST_EXISTS);
+ if (exists) {
+ file = g_file_new_for_path (filename);
+ ret = g_file_delete (file, NULL, &error_local);
+ g_object_unref (file);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to delete metadata file %s: %s", filename, error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get uncompressed filename for %s", zif_md_type_to_text (md->priv->type));
+ ret = FALSE;
+ goto out;
+ }
+
+ /* file does not exist */
+ exists = g_file_test (filename, G_FILE_TEST_EXISTS);
+ if (exists) {
+ file = g_file_new_for_path (filename);
+ ret = g_file_delete (file, NULL, &error_local);
+ g_object_unref (file);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to delete metadata file %s: %s", filename, error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* okay */
+ ret = TRUE;
+out:
+ return ret;
+}
+
+/**
+ * zif_md_type_to_text:
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_md_type_to_text (ZifMdType type)
+{
+ if (type == ZIF_MD_TYPE_FILELISTS_XML)
+ return "filelists";
+ if (type == ZIF_MD_TYPE_FILELISTS_SQL)
+ return "filelists_db";
+ if (type == ZIF_MD_TYPE_PRIMARY_XML)
+ return "primary";
+ if (type == ZIF_MD_TYPE_PRIMARY_SQL)
+ return "primary_db";
+ if (type == ZIF_MD_TYPE_OTHER_XML)
+ return "other";
+ if (type == ZIF_MD_TYPE_OTHER_SQL)
+ return "other_db";
+ if (type == ZIF_MD_TYPE_COMPS)
+ return "group";
+ if (type == ZIF_MD_TYPE_COMPS_GZ)
+ return "group_gz";
+ if (type == ZIF_MD_TYPE_METALINK)
+ return "metalink";
+ if (type == ZIF_MD_TYPE_MIRRORLIST)
+ return "mirrorlist";
+ if (type == ZIF_MD_TYPE_PRESTODELTA)
+ return "prestodelta";
+ if (type == ZIF_MD_TYPE_UPDATEINFO)
+ return "updateinfo";
+ return "unknown";
+}
+
+/**
+ * zif_md_file_check:
+ * @md: the #ZifMd object
+ * @use_uncompressed: If we should check only the uncompresed version
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Check the metadata files to make sure they are valid.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_md_file_check (ZifMd *md, gboolean use_uncompressed, GError **error)
+{
+ gboolean ret = FALSE;
+ GError *error_local = NULL;
+ gchar *data = NULL;
+ gchar *checksum = NULL;
+ const gchar *filename;
+ const gchar *checksum_wanted;
+ gsize length;
+
+ g_return_val_if_fail (ZIF_IS_MD (md), FALSE);
+ g_return_val_if_fail (md->priv->id != NULL, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* metalink has no checksum... */
+ if (md->priv->type == ZIF_MD_TYPE_METALINK ||
+ md->priv->type == ZIF_MD_TYPE_MIRRORLIST) {
+ egg_debug ("skipping checksum check on %s", zif_md_type_to_text (md->priv->type));
+ ret = TRUE;
+ goto out;
+ }
+
+ /* get correct filename */
+ if (use_uncompressed)
+ filename = md->priv->filename_uncompressed;
+ else
+ filename = md->priv->filename;
+
+ /* no checksum set */
+ if (filename == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "no filename for %s [%s]", md->priv->id, zif_md_type_to_text (md->priv->type));
+ ret = FALSE;
+ goto out;
+ }
+
+ /* get contents */
+ ret = g_file_get_contents (filename, &data, &length, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get contents of %s: %s", filename, error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* get the one we want */
+ if (use_uncompressed)
+ checksum_wanted = md->priv->checksum_uncompressed;
+ else
+ checksum_wanted = md->priv->checksum;
+
+ /* no checksum set */
+ if (checksum_wanted == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "checksum not set for %s", filename);
+ ret = FALSE;
+ goto out;
+ }
+
+ /* compute checksum */
+ checksum = g_compute_checksum_for_data (md->priv->checksum_type, (guchar*) data, length);
+
+ /* matches? */
+ ret = (g_strcmp0 (checksum, checksum_wanted) == 0);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "checksum incorrect, wanted %s, got %s for %s", checksum_wanted, checksum, filename);
+ goto out;
+ }
+ egg_debug ("%s checksum correct (%s)", filename, checksum_wanted);
+out:
+ g_free (data);
+ g_free (checksum);
+ return ret;
+}
+
+/**
+ * zif_md_finalize:
+ **/
+static void
+zif_md_finalize (GObject *object)
+{
+ ZifMd *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD (object));
+ md = ZIF_MD (object);
+
+ g_free (md->priv->id);
+ g_free (md->priv->filename);
+ g_free (md->priv->location);
+ g_free (md->priv->checksum);
+ g_free (md->priv->checksum_uncompressed);
+
+ g_object_unref (md->priv->config);
+
+ G_OBJECT_CLASS (zif_md_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_class_init:
+ **/
+static void
+zif_md_class_init (ZifMdClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = zif_md_finalize;
+ g_type_class_add_private (klass, sizeof (ZifMdPrivate));
+}
+
+/**
+ * zif_md_init:
+ **/
+static void
+zif_md_init (ZifMd *md)
+{
+ md->priv = ZIF_MD_GET_PRIVATE (md);
+ md->priv->type = ZIF_MD_TYPE_UNKNOWN;
+ md->priv->loaded = FALSE;
+ md->priv->id = NULL;
+ md->priv->filename = NULL;
+ md->priv->timestamp = 0;
+ md->priv->location = NULL;
+ md->priv->checksum = NULL;
+ md->priv->checksum_uncompressed = NULL;
+ md->priv->checksum_type = 0;
+ md->priv->remote = NULL;
+ md->priv->config = zif_config_new ();
+}
+
+/**
+ * zif_md_new:
+ *
+ * Return value: A new #ZifMd class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMd *
+zif_md_new (void)
+{
+ ZifMd *md;
+ md = g_object_new (ZIF_TYPE_MD, NULL);
+ return ZIF_MD (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_test (EggTest *test)
+{
+ ZifMd *md;
+ gboolean ret;
+ GError *error = NULL;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+
+ if (!egg_test_start (test, "ZifMd"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get store_remote md");
+ md = zif_md_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (md, "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (md, cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md.h b/backends/yum/libzif/zif-md.h
new file mode 100644
index 0000000..e589a5f
--- /dev/null
+++ b/backends/yum/libzif/zif-md.h
@@ -0,0 +1,237 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_H
+#define __ZIF_MD_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-completion.h"
+#include "zif-store-remote.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD (zif_md_get_type ())
+#define ZIF_MD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD, ZifMd))
+#define ZIF_MD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD, ZifMdClass))
+#define ZIF_IS_MD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD))
+#define ZIF_IS_MD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD))
+#define ZIF_MD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD, ZifMdClass))
+#define ZIF_MD_ERROR (zif_md_error_quark ())
+
+typedef struct _ZifMd ZifMd;
+typedef struct _ZifMdPrivate ZifMdPrivate;
+typedef struct _ZifMdClass ZifMdClass;
+
+struct _ZifMd
+{
+ GObject parent;
+ ZifMdPrivate *priv;
+};
+
+struct _ZifMdClass
+{
+ GObjectClass parent_class;
+ /* vtable */
+ gboolean (*load) (ZifMd *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ gboolean (*unload) (ZifMd *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*search_file) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*search_name) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*search_details) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*search_group) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*search_pkgid) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*what_provides) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*resolve) (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*get_packages) (ZifMd *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+ GPtrArray *(*find_package) (ZifMd *md,
+ const gchar *package_id,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+};
+
+/* types of metadata */
+typedef enum {
+ ZIF_MD_TYPE_PRIMARY_XML,
+ ZIF_MD_TYPE_PRIMARY_SQL,
+ ZIF_MD_TYPE_FILELISTS_XML,
+ ZIF_MD_TYPE_FILELISTS_SQL,
+ ZIF_MD_TYPE_OTHER_XML,
+ ZIF_MD_TYPE_OTHER_SQL,
+ ZIF_MD_TYPE_COMPS,
+ ZIF_MD_TYPE_COMPS_GZ,
+ ZIF_MD_TYPE_METALINK,
+ ZIF_MD_TYPE_MIRRORLIST,
+ ZIF_MD_TYPE_PRESTODELTA,
+ ZIF_MD_TYPE_UPDATEINFO,
+ ZIF_MD_TYPE_UNKNOWN
+} ZifMdType;
+
+typedef enum {
+ ZIF_MD_ERROR_FAILED,
+ ZIF_MD_ERROR_NO_SUPPORT,
+ ZIF_MD_ERROR_FAILED_TO_LOAD,
+ ZIF_MD_ERROR_FAILED_AS_OFFLINE,
+ ZIF_MD_ERROR_FAILED_DOWNLOAD,
+ ZIF_MD_ERROR_BAD_SQL,
+ ZIF_MD_ERROR_LAST
+} ZifMdError;
+
+GType zif_md_get_type (void);
+GQuark zif_md_error_quark (void);
+ZifMd *zif_md_new (void);
+
+/* setters */
+gboolean zif_md_set_mdtype (ZifMd *md,
+ ZifMdType type);
+gboolean zif_md_set_store_remote (ZifMd *md,
+ ZifStoreRemote *remote);
+gboolean zif_md_set_id (ZifMd *md,
+ const gchar *id);
+gboolean zif_md_set_filename (ZifMd *md,
+ const gchar *filename);
+gboolean zif_md_set_timestamp (ZifMd *md,
+ guint timestamp);
+gboolean zif_md_set_location (ZifMd *md,
+ const gchar *location);
+gboolean zif_md_set_checksum (ZifMd *md,
+ const gchar *checksum);
+gboolean zif_md_set_checksum_uncompressed (ZifMd *md,
+ const gchar *checksum_uncompressed);
+gboolean zif_md_set_checksum_type (ZifMd *md,
+ GChecksumType checksum_type);
+const gchar *zif_md_type_to_text (ZifMdType type);
+
+/* getters */
+const gchar *zif_md_get_id (ZifMd *md);
+ZifMdType zif_md_get_mdtype (ZifMd *md);
+const gchar *zif_md_get_filename (ZifMd *md);
+const gchar *zif_md_get_filename_uncompressed (ZifMd *md);
+guint zif_md_get_age (ZifMd *md,
+ GError **error);
+const gchar *zif_md_get_location (ZifMd *md);
+
+/* actions */
+gboolean zif_md_load (ZifMd *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+gboolean zif_md_unload (ZifMd *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+gboolean zif_md_clean (ZifMd *md,
+ GError **error);
+gboolean zif_md_file_check (ZifMd *md,
+ gboolean use_uncompressed,
+ GError **error);
+GPtrArray *zif_md_search_file (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_search_name (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_search_details (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_search_group (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_search_pkgid (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_what_provides (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_resolve (ZifMd *md,
+ const gchar *search,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_get_packages (ZifMd *md,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+GPtrArray *zif_md_find_package (ZifMd *md,
+ const gchar *package_id,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_H */
+
diff --git a/backends/yum/libzif/zif-update-info.c b/backends/yum/libzif/zif-update-info.c
new file mode 100644
index 0000000..d780cc8
--- /dev/null
+++ b/backends/yum/libzif/zif-update-info.c
@@ -0,0 +1,345 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-update-info
+ * @short_description: Generic object to represent some information about an update.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "egg-debug.h"
+
+#include "zif-update-info.h"
+
+#define ZIF_UPDATE_INFO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_UPDATE_INFO, ZifUpdateInfoPrivate))
+
+struct _ZifUpdateInfoPrivate
+{
+ ZifUpdateInfoKind kind;
+ gchar *url;
+ gchar *title;
+};
+
+enum {
+ PROP_0,
+ PROP_KIND,
+ PROP_URL,
+ PROP_TITLE,
+ PROP_LAST
+};
+
+G_DEFINE_TYPE (ZifUpdateInfo, zif_update_info, G_TYPE_OBJECT)
+
+/**
+ * zif_update_info_get_kind:
+ * @update_info: the #ZifUpdateInfo object
+ *
+ * Gets the update info kind.
+ *
+ * Return value: the kind of update info, e.g. %ZIF_UPDATE_INFO_KIND_CVE.
+ *
+ * Since: 0.0.1
+ **/
+ZifUpdateInfoKind
+zif_update_info_get_kind (ZifUpdateInfo *update_info)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE_INFO (update_info), ZIF_UPDATE_INFO_KIND_LAST);
+ return update_info->priv->kind;
+}
+
+/**
+ * zif_update_info_get_url:
+ * @update_info: the #ZifUpdateInfo object
+ *
+ * Gets the URL for this update.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_update_info_get_url (ZifUpdateInfo *update_info)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE_INFO (update_info), NULL);
+ return update_info->priv->url;
+}
+
+/**
+ * zif_update_info_get_title:
+ * @update_info: the #ZifUpdateInfo object
+ *
+ * Gets the title for this update.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_update_info_get_title (ZifUpdateInfo *update_info)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE_INFO (update_info), NULL);
+ return update_info->priv->title;
+}
+
+/**
+ * zif_update_info_set_kind:
+ * @update_info: the #ZifUpdateInfo object
+ * @kind: the kind of update info, e.g. %ZIF_UPDATE_INFO_KIND_BUGZILLA
+ *
+ * Sets the update_info kind status.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_info_set_kind (ZifUpdateInfo *update_info, ZifUpdateInfoKind kind)
+{
+ g_return_if_fail (ZIF_IS_UPDATE_INFO (update_info));
+ update_info->priv->kind = kind;
+}
+
+/**
+ * zif_update_info_set_url:
+ * @update_info: the #ZifUpdateInfo object
+ * @url: the update info URL
+ *
+ * Sets the update info URL.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_info_set_url (ZifUpdateInfo *update_info, const gchar *url)
+{
+ g_return_if_fail (ZIF_IS_UPDATE_INFO (update_info));
+ g_return_if_fail (url != NULL);
+ g_return_if_fail (update_info->priv->url == NULL);
+
+ update_info->priv->url = g_strdup (url);
+}
+
+/**
+ * zif_update_info_set_title:
+ * @update_info: the #ZifUpdateInfo object
+ * @title: the update info title
+ *
+ * Sets the update info title.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_info_set_title (ZifUpdateInfo *update_info, const gchar *title)
+{
+ g_return_if_fail (ZIF_IS_UPDATE_INFO (update_info));
+ g_return_if_fail (title != NULL);
+ g_return_if_fail (update_info->priv->title == NULL);
+
+ update_info->priv->title = g_strdup (title);
+}
+
+/**
+ * zif_update_info_kind_to_string:
+ * @type: the #ZifUpdateInfoKind enumerated value
+ *
+ * Gets the string representation of a #ZifUpdateInfoKind
+ *
+ * Return value: The #ZifUpdateInfoKind represented as a string
+ **/
+const gchar *
+zif_update_info_kind_to_string (ZifUpdateInfoKind kind)
+{
+ if (kind == ZIF_UPDATE_INFO_KIND_CVE)
+ return "cve";
+ if (kind == ZIF_UPDATE_INFO_KIND_BUGZILLA)
+ return "bugzilla";
+ return "unknown";
+}
+
+/**
+ * zif_update_info_kind_from_string:
+ * @type: the #ZifUpdateInfoKind enumerated value
+ *
+ * Gets the string representation of a #ZifUpdateInfoKind
+ *
+ * Return value: The #ZifUpdateInfoKind represented as a string
+ **/
+ZifUpdateInfoKind
+zif_update_info_kind_from_string (const gchar *type)
+{
+ if (g_strcmp0 (type, "cve") == 0)
+ return ZIF_UPDATE_INFO_KIND_CVE;
+ if (g_strcmp0 (type, "bz") == 0)
+ return ZIF_UPDATE_INFO_KIND_BUGZILLA;
+ return ZIF_UPDATE_INFO_KIND_LAST;
+}
+
+/**
+ * zif_update_info_get_property:
+ **/
+static void
+zif_update_info_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ ZifUpdateInfo *update_info = ZIF_UPDATE_INFO (object);
+ ZifUpdateInfoPrivate *priv = update_info->priv;
+
+ switch (prop_id) {
+ case PROP_KIND:
+ g_value_set_uint (value, priv->kind);
+ break;
+ case PROP_URL:
+ g_value_set_string (value, priv->url);
+ break;
+ case PROP_TITLE:
+ g_value_set_string (value, priv->title);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+/**
+ * zif_update_info_set_property:
+ **/
+static void
+zif_update_info_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+}
+
+/**
+ * zif_update_info_finalize:
+ **/
+static void
+zif_update_info_finalize (GObject *object)
+{
+ ZifUpdateInfo *update_info;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_UPDATE_INFO (object));
+ update_info = ZIF_UPDATE_INFO (object);
+
+ g_free (update_info->priv->url);
+ g_free (update_info->priv->title);
+
+ G_OBJECT_CLASS (zif_update_info_parent_class)->finalize (object);
+}
+
+/**
+ * zif_update_info_class_init:
+ **/
+static void
+zif_update_info_class_init (ZifUpdateInfoClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = zif_update_info_finalize;
+ object_class->get_property = zif_update_info_get_property;
+ object_class->set_property = zif_update_info_set_property;
+
+ /**
+ * ZifUpdateInfo:kind:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_uint ("kind", NULL, NULL,
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_KIND, pspec);
+
+ /**
+ * ZifUpdateInfo:url:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("url", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_URL, pspec);
+
+ /**
+ * ZifUpdateInfo:title:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("title", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_TITLE, pspec);
+ g_type_class_add_private (klass, sizeof (ZifUpdateInfoPrivate));
+}
+
+/**
+ * zif_update_info_init:
+ **/
+static void
+zif_update_info_init (ZifUpdateInfo *update_info)
+{
+ update_info->priv = ZIF_UPDATE_INFO_GET_PRIVATE (update_info);
+ update_info->priv->kind = ZIF_UPDATE_INFO_KIND_LAST;
+ update_info->priv->url = NULL;
+ update_info->priv->title = NULL;
+}
+
+/**
+ * zif_update_info_new:
+ *
+ * Return value: A new #ZifUpdateInfo class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifUpdateInfo *
+zif_update_info_new (void)
+{
+ ZifUpdateInfo *update_info;
+ update_info = g_object_new (ZIF_TYPE_UPDATE_INFO, NULL);
+ return ZIF_UPDATE_INFO (update_info);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_update_info_test (EggTest *test)
+{
+ ZifUpdateInfo *update_info;
+
+ if (!egg_test_start (test, "ZifUpdateInfo"))
+ return;
+
+ /************************************************************/
+ egg_test_title (test, "get update_info");
+ update_info = zif_update_info_new ();
+ egg_test_assert (test, update_info != NULL);
+
+ g_object_unref (update_info);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-update-info.h b/backends/yum/libzif/zif-update-info.h
new file mode 100644
index 0000000..ced7585
--- /dev/null
+++ b/backends/yum/libzif/zif-update-info.h
@@ -0,0 +1,86 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_UPDATE_INFO_H
+#define __ZIF_UPDATE_INFO_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_UPDATE_INFO (zif_update_info_get_type ())
+#define ZIF_UPDATE_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_UPDATE_INFO, ZifUpdateInfo))
+#define ZIF_UPDATE_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_UPDATE_INFO, ZifUpdateInfoClass))
+#define ZIF_IS_UPDATE_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_UPDATE_INFO))
+#define ZIF_IS_UPDATE_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_UPDATE_INFO))
+#define ZIF_UPDATE_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_UPDATE_INFO, ZifUpdateInfoClass))
+#define ZIF_UPDATE_INFO_ERROR (zif_update_info_error_quark ())
+
+typedef struct _ZifUpdateInfo ZifUpdateInfo;
+typedef struct _ZifUpdateInfoPrivate ZifUpdateInfoPrivate;
+typedef struct _ZifUpdateInfoClass ZifUpdateInfoClass;
+
+typedef enum {
+ ZIF_UPDATE_INFO_KIND_CVE,
+ ZIF_UPDATE_INFO_KIND_BUGZILLA,
+ ZIF_UPDATE_INFO_KIND_LAST
+} ZifUpdateInfoKind;
+
+struct _ZifUpdateInfo
+{
+ GObject parent;
+ ZifUpdateInfoPrivate *priv;
+};
+
+struct _ZifUpdateInfoClass
+{
+ GObjectClass parent_class;
+};
+
+GType zif_update_info_get_type (void);
+ZifUpdateInfo *zif_update_info_new (void);
+
+/* public getters */
+ZifUpdateInfoKind zif_update_info_get_kind (ZifUpdateInfo *update_info);
+const gchar *zif_update_info_get_url (ZifUpdateInfo *update_info);
+const gchar *zif_update_info_get_title (ZifUpdateInfo *update_info);
+
+/* internal setters: TODO, in seporate -internal header file */
+void zif_update_info_set_kind (ZifUpdateInfo *update_info,
+ ZifUpdateInfoKind kind);
+void zif_update_info_set_url (ZifUpdateInfo *update_info,
+ const gchar *url);
+void zif_update_info_set_title (ZifUpdateInfo *update_info,
+ const gchar *title);
+
+/* utility functions */
+const gchar *zif_update_info_kind_to_string (ZifUpdateInfoKind type);
+ZifUpdateInfoKind zif_update_info_kind_from_string (const gchar *type);
+
+G_END_DECLS
+
+#endif /* __ZIF_UPDATE_INFO_H */
+
diff --git a/backends/yum/libzif/zif-update.c b/backends/yum/libzif/zif-update.c
new file mode 100644
index 0000000..3ba9dcf
--- /dev/null
+++ b/backends/yum/libzif/zif-update.c
@@ -0,0 +1,539 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-update
+ * @short_description: Generic object to represent some information about an update.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "egg-debug.h"
+
+#include "zif-update.h"
+
+#define ZIF_UPDATE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_UPDATE, ZifUpdatePrivate))
+
+struct _ZifUpdatePrivate
+{
+ PkUpdateStateEnum state;
+ PkInfoEnum kind;
+ gchar *id;
+ gchar *title;
+ gchar *description;
+ gchar *issued;
+ GPtrArray *update_infos;
+ GPtrArray *packages;
+};
+
+enum {
+ PROP_0,
+ PROP_STATE,
+ PROP_KIND,
+ PROP_ID,
+ PROP_TITLE,
+ PROP_DESCRIPTION,
+ PROP_ISSUED,
+ PROP_LAST
+};
+
+G_DEFINE_TYPE (ZifUpdate, zif_update, G_TYPE_OBJECT)
+
+/**
+ * zif_update_get_state:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the update state.
+ *
+ * Return value: the state of update, e.g. %PK_UPDATE_STATE_ENUM_STABLE.
+ *
+ * Since: 0.0.1
+ **/
+PkUpdateStateEnum
+zif_update_get_state (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), PK_UPDATE_STATE_ENUM_LAST);
+ return update->priv->state;
+}
+
+/**
+ * zif_update_get_kind:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the update kind.
+ *
+ * Return value: the state of update, e.g. %PK_INFO_ENUM_SECURITY.
+ *
+ * Since: 0.0.1
+ **/
+PkInfoEnum
+zif_update_get_kind (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), PK_INFO_ENUM_LAST);
+ return update->priv->state;
+}
+
+/**
+ * zif_update_get_id:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the ID for this update.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_update_get_id (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->id;
+}
+
+/**
+ * zif_update_get_title:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the title for this update.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_update_get_title (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->title;
+}
+
+/**
+ * zif_update_get_description:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the description for this update.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_update_get_description (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->description;
+}
+
+/**
+ * zif_update_get_issued:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the time this update was issued.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_update_get_issued (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->issued;
+}
+
+/**
+ * zif_update_get_update_infos:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the update info for this update.
+ *
+ * Return value: A #GPtrArray of #ZifUpdateInfo, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_update_get_update_infos (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->update_infos;
+}
+
+/**
+ * zif_update_get_packages:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the packages for this update.
+ *
+ * Return value: A #GPtrArray of #ZifPackage, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_update_get_packages (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->packages;
+}
+
+/**
+ * zif_update_set_state:
+ * @update: the #ZifUpdate object
+ * @state: If the update is state
+ *
+ * Sets the update state status.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_state (ZifUpdate *update, PkUpdateStateEnum state)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ update->priv->state = state;
+}
+
+/**
+ * zif_update_set_kind:
+ * @update: the #ZifUpdate object
+ * @kind: If the update kind, e.g. %PK_INFO_ENUM_SECURITY.
+ *
+ * Sets the kind of update.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_kind (ZifUpdate *update, PkInfoEnum kind)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ update->priv->kind = kind;
+}
+
+/**
+ * zif_update_set_id:
+ * @update: the #ZifUpdate object
+ * @id: the update ID
+ *
+ * Sets the update ID.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_id (ZifUpdate *update, const gchar *id)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (id != NULL);
+ g_return_if_fail (update->priv->id == NULL);
+
+ update->priv->id = g_strdup (id);
+}
+
+/**
+ * zif_update_set_title:
+ * @update: the #ZifUpdate object
+ * @title: the update title
+ *
+ * Sets the update title.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_title (ZifUpdate *update, const gchar *title)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (title != NULL);
+ g_return_if_fail (update->priv->title == NULL);
+
+ update->priv->title = g_strdup (title);
+}
+
+/**
+ * zif_update_set_description:
+ * @update: the #ZifUpdate object
+ * @description: the update description
+ *
+ * Sets the update description.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_description (ZifUpdate *update, const gchar *description)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (description != NULL);
+ g_return_if_fail (update->priv->description == NULL);
+
+ update->priv->description = g_strdup (description);
+}
+
+/**
+ * zif_update_set_issued:
+ * @update: the #ZifUpdate object
+ * @issued: the update issued time
+ *
+ * Sets the time the update was issued.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_issued (ZifUpdate *update, const gchar *issued)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (issued != NULL);
+ g_return_if_fail (update->priv->issued == NULL);
+
+ update->priv->issued = g_strdup (issued);
+}
+
+/**
+ * zif_update_add_update_info:
+ * @update: the #ZifUpdate object
+ * @update_info: the #ZifUpdateInfo
+ *
+ * Adds some update info to the update.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_add_update_info (ZifUpdate *update, ZifUpdateInfo *update_info)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (update_info != NULL);
+ g_ptr_array_add (update->priv->update_infos, g_object_ref (update_info));
+}
+
+/**
+ * zif_update_add_package:
+ * @update: the #ZifUpdate object
+ * @package: the #ZifPackage
+ *
+ * Adds some update info to the update.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_add_package (ZifUpdate *update, ZifPackage *package)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (package != NULL);
+ g_ptr_array_add (update->priv->packages, g_object_ref (package));
+}
+
+/**
+ * zif_update_get_property:
+ **/
+static void
+zif_update_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ ZifUpdate *update = ZIF_UPDATE (object);
+ ZifUpdatePrivate *priv = update->priv;
+
+ switch (prop_id) {
+ case PROP_STATE:
+ g_value_set_uint (value, priv->state);
+ break;
+ case PROP_KIND:
+ g_value_set_uint (value, priv->kind);
+ break;
+ case PROP_ID:
+ g_value_set_string (value, priv->id);
+ break;
+ case PROP_TITLE:
+ g_value_set_string (value, priv->title);
+ break;
+ case PROP_DESCRIPTION:
+ g_value_set_string (value, priv->description);
+ break;
+ case PROP_ISSUED:
+ g_value_set_string (value, priv->issued);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+/**
+ * zif_update_set_property:
+ **/
+static void
+zif_update_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+}
+
+/**
+ * zif_update_finalize:
+ **/
+static void
+zif_update_finalize (GObject *object)
+{
+ ZifUpdate *update;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_UPDATE (object));
+ update = ZIF_UPDATE (object);
+
+ g_free (update->priv->id);
+ g_free (update->priv->title);
+ g_free (update->priv->description);
+ g_free (update->priv->issued);
+ g_ptr_array_unref (update->priv->update_infos);
+ g_ptr_array_unref (update->priv->packages);
+
+ G_OBJECT_CLASS (zif_update_parent_class)->finalize (object);
+}
+
+/**
+ * zif_update_class_init:
+ **/
+static void
+zif_update_class_init (ZifUpdateClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = zif_update_finalize;
+ object_class->get_property = zif_update_get_property;
+ object_class->set_property = zif_update_set_property;
+
+ /**
+ * ZifUpdate:state:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_uint ("state", NULL, NULL,
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_STATE, pspec);
+
+ /**
+ * ZifUpdate:kind:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_uint ("kind", NULL, NULL,
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_KIND, pspec);
+
+ /**
+ * ZifUpdate:id:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("id", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_ID, pspec);
+
+ /**
+ * ZifUpdate:title:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("title", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_TITLE, pspec);
+
+ /**
+ * ZifUpdate:description:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("description", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_DESCRIPTION, pspec);
+
+ /**
+ * ZifUpdate:issued:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("issued", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_ISSUED, pspec);
+
+ g_type_class_add_private (klass, sizeof (ZifUpdatePrivate));
+}
+
+/**
+ * zif_update_init:
+ **/
+static void
+zif_update_init (ZifUpdate *update)
+{
+ update->priv = ZIF_UPDATE_GET_PRIVATE (update);
+ update->priv->state = PK_UPDATE_STATE_ENUM_LAST;
+ update->priv->kind = PK_INFO_ENUM_LAST;
+ update->priv->id = NULL;
+ update->priv->title = NULL;
+ update->priv->description = NULL;
+ update->priv->issued = NULL;
+ update->priv->update_infos = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ update->priv->packages = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+}
+
+/**
+ * zif_update_new:
+ *
+ * Return value: A new #ZifUpdate class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifUpdate *
+zif_update_new (void)
+{
+ ZifUpdate *update;
+ update = g_object_new (ZIF_TYPE_UPDATE, NULL);
+ return ZIF_UPDATE (update);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_update_test (EggTest *test)
+{
+ ZifUpdate *update;
+
+ if (!egg_test_start (test, "ZifUpdate"))
+ return;
+
+ /************************************************************/
+ egg_test_title (test, "get update");
+ update = zif_update_new ();
+ egg_test_assert (test, update != NULL);
+
+ g_object_unref (update);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-update.h b/backends/yum/libzif/zif-update.h
new file mode 100644
index 0000000..881b0d8
--- /dev/null
+++ b/backends/yum/libzif/zif-update.h
@@ -0,0 +1,96 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_UPDATE_H
+#define __ZIF_UPDATE_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "zif-update-info.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_UPDATE (zif_update_get_type ())
+#define ZIF_UPDATE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_UPDATE, ZifUpdate))
+#define ZIF_UPDATE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_UPDATE, ZifUpdateClass))
+#define ZIF_IS_UPDATE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_UPDATE))
+#define ZIF_IS_UPDATE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_UPDATE))
+#define ZIF_UPDATE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_UPDATE, ZifUpdateClass))
+#define ZIF_UPDATE_ERROR (zif_update_error_quark ())
+
+typedef struct _ZifUpdate ZifUpdate;
+typedef struct _ZifUpdatePrivate ZifUpdatePrivate;
+typedef struct _ZifUpdateClass ZifUpdateClass;
+
+#include "zif-package.h"
+
+struct _ZifUpdate
+{
+ GObject parent;
+ ZifUpdatePrivate *priv;
+};
+
+struct _ZifUpdateClass
+{
+ GObjectClass parent_class;
+};
+
+GType zif_update_get_type (void);
+ZifUpdate *zif_update_new (void);
+
+/* public getters */
+PkUpdateStateEnum zif_update_get_state (ZifUpdate *update);
+PkInfoEnum zif_update_get_kind (ZifUpdate *update);
+const gchar *zif_update_get_id (ZifUpdate *update);
+const gchar *zif_update_get_title (ZifUpdate *update);
+const gchar *zif_update_get_description (ZifUpdate *update);
+const gchar *zif_update_get_issued (ZifUpdate *update);
+GPtrArray *zif_update_get_update_infos (ZifUpdate *update);
+GPtrArray *zif_update_get_packages (ZifUpdate *update);
+
+/* internal setters: TODO, in seporate -internal header file */
+void zif_update_set_state (ZifUpdate *update,
+ PkUpdateStateEnum state);
+void zif_update_set_kind (ZifUpdate *update,
+ PkInfoEnum type);
+void zif_update_set_id (ZifUpdate *update,
+ const gchar *id);
+void zif_update_set_title (ZifUpdate *update,
+ const gchar *title);
+void zif_update_set_description (ZifUpdate *update,
+ const gchar *description);
+void zif_update_set_issued (ZifUpdate *update,
+ const gchar *issued);
+void zif_update_add_update_info (ZifUpdate *update,
+ ZifUpdateInfo *update_info);
+void zif_update_add_package (ZifUpdate *update,
+ ZifPackage *package);
+
+G_END_DECLS
+
+#endif /* __ZIF_UPDATE_H */
+
commit 45bad680ec2ab1c274fe3709871919cc1be28f49
Author: kmilos <kmilos at fedoraproject.org>
Date: Wed Apr 7 22:24:39 2010 +0000
l10n: Updates to Serbian (sr) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/sr.po b/po/sr.po
index bc292ac..84b1876 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PackageKit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-16 19:09+0000\n"
-"PO-Revision-Date: 2010-03-16 20:40+0100\n"
+"POT-Creation-Date: 2010-04-07 19:20+0000\n"
+"PO-Revision-Date: 2010-04-07 23:02-0000\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian <trans-sr at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -23,115 +23,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "ТÑанÑакÑиÑа"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "СиÑÑемÑко вÑеме"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "УÑпела"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "ТаÑно"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "ÐеÑаÑно"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "РадÑа"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "ТÑаÑаÑе"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(ÑекÑнди)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Ðомандна линиÑа"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "ÐоÑиÑниÑки ÐÐ"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "ÐоÑиÑниÑко име"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "СÑваÑно име"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "ÐбÑÑ
ваÑени пакеÑи:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "ÐбÑÑ
ваÑени пакеÑи: ни Ñедан"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "ÐиÑÑÑибÑÑиÑа"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "ÐÑÑÑа"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "СажеÑак"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "ÐаÑегоÑиÑа"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "ÐденÑиÑикаÑоÑ"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "РодиÑеÑ"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Ðазив"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Ðкона"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "ÐиÑе о надгÑадÑи:"
@@ -140,7 +140,7 @@ msgstr "ÐиÑе о надгÑадÑи:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -151,165 +151,165 @@ msgstr[1] "ÐакеÑа"
msgstr[2] "ÐакеÑа"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "ÐжÑÑиÑа"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "ÐÑевазилази"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "ÐздаваÑ"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Ðоновно покÑеÑаÑе"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "ÐÐ¿Ð¸Ñ Ð°Ð¶ÑÑиÑаÑа"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "ÐÑомене"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "СÑаÑе"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "ÐздаÑо"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:511
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "ÐаÑÑм ажÑÑиÑаÑа"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "УкÑÑÑена"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "ÐÑкÑÑÑена"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Ðоновно покÑеÑаÑе ÑиÑÑема заÑ
Ñева пакеÑ:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "ÐеопÑ
одно Ñе поновно покÑеÑаÑе ÑеÑиÑе:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Ðоновно покÑеÑаÑе ÑиÑÑема (безбедноÑно) заÑ
Ñева:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "ÐеопÑ
одно Ñе поновно покÑеÑаÑе ÑеÑиÑе (безбедноÑно):"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Ðоновно покÑеÑаÑе пÑогÑама заÑ
Ñева пакеÑ:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "ÐÐ¿Ð¸Ñ Ð¿Ð°ÐºÐµÑа"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "ÐоÑÑка:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Ðема даÑоÑека"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "СпиÑак даÑоÑека"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "ÐÑоÑенаÑ"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "СÑаÑÑÑ"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "РезÑлÑаÑи:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Ðобна гÑеÑка"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "ТÑанÑакÑиÑа ниÑе ÑÑпела"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "ТÑенÑÑно нема доÑÑÑпниÑ
ажÑÑиÑаÑа."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "ТÑенÑÑно нема доÑÑÑпниÑ
надгÑадÑи."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "ÐеопÑ
одно Ñе поновно покÑеÑаÑе ÑиÑÑема Ñади завÑÑеÑка ажÑÑиÑаÑа."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "ÐеопÑ
одно Ñе одÑавÑиваÑе и поновна пÑиÑава Ñади завÑÑеÑка ажÑÑиÑаÑа."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -318,7 +318,7 @@ msgstr ""
"инÑÑалиÑана важна безбедноÑна ажÑÑиÑаÑа."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
@@ -327,29 +327,29 @@ msgstr ""
"инÑÑалиÑана важна безбедноÑна ажÑÑиÑаÑа."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"ÐÑекивано Ñе име пакеÑа, ÑÑÑваÑи Ñе добиÑена даÑоÑека. ÐокÑÑаÑÑе да "
"ÑпоÑÑебиÑе âpkcon install-local %sâ намеÑÑо."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Ðва алаÑка ниÑе могла пÑонаÑи никакве доÑÑÑпне пакеÑе: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Ðва алаÑка ниÑе могла пÑонаÑи инÑÑалиÑани пакеÑ: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Ðва алаÑка ниÑе могла пÑонаÑи пакеÑ: %s"
@@ -358,180 +358,185 @@ msgstr "Ðва алаÑка ниÑе могла пÑонаÑи пакеÑ: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Ðва алаÑка ниÑе пÑонаÑла Ñве пакеÑе: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "УÑлÑжни пÑогÑам Ñе изненада пÑекинÑо!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "ТекÑÑÑално ÑÑÑеÑе пÑогÑама ÐакеÑÐиÑ"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "ÐаÑедбе:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr "ÐаÑÑм поÑледÑег извÑÑаваÑа ове ÑадÑе ниÑе пÑонаÑен"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "ÐÑикажи веÑзиÑÑ Ð¿ÑогÑама и завÑÑи Ñад"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "ÐамеÑÑи ÑилÑеÑ, нпÑ. инÑÑалиÑани"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "ÐавÑÑи Ñад без ÑекаÑа да Ñе поÑлови завÑÑе"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "ÐнÑÑалиÑÐ°Ñ Ð¿Ð°ÐºÐµÑе без пиÑаÑа за поÑвÑдÑ"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"ÐзвÑÑи наÑÐµÐ´Ð±Ñ ÐºÐ¾ÑиÑÑеÑи неиÑкоÑиÑÑени мÑежни опÑег и ÑакоÑе ÑÑоÑеÑи маÑе "
"енеÑгиÑе"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
"ШÑÐ°Ð¼Ð¿Ð°Ñ Ð¸Ð·Ð»Ð°Ð· ÑиÑÑив маÑини на екÑанÑ, ÑмеÑÑо ÑпоÑÑебе анимиÑаниÑ
виÑеÑа"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "ÐеÑÑпеÑно конÑакÑиÑаÑе ÐакеÑÐиÑа."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "ÐÑокÑи ниÑе могао да бÑде поÑÑавÑен"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "Ðаведени ÑилÑÐµÑ Ð½Ð¸Ñе иÑпÑаван"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "ÐоÑаÑе навеÑÑи вÑÑÑÑ Ð¿ÑеÑÑаге, нпÑ. по именÑ"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "ÐоÑаÑе навеÑÑи ÑеÑмин за пÑеÑÑагÑ"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "ÐеиÑпÑавна вÑÑÑа пÑеÑÑаге"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "ÐеопÑ
одно Ñе име пакеÑа за инÑÑалаÑиÑÑ"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "ÐеопÑ
одно Ñе име даÑоÑеке за инÑÑалаÑиÑÑ"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "ÐоÑаÑе навеÑÑи вÑÑÑÑ, ÐРкÑÑÑа и ÐРпакеÑа (key_id и package_id)"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "ÐоÑаÑе навеÑÑи назив пакеÑа за ÑклаÑаÑе"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "ÐеопÑ
одни ÑÑ Ð¾Ð´ÑедиÑни диÑекÑоÑиÑÑм и имена пакеÑа за пÑеÑзимаÑе"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "ÐиÑекÑоÑиÑÑм ниÑе наÑен"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "ÐоÑеÑе навеÑÑи иденÑиÑикаÑÐ¾Ñ Ð»Ð¸ÑенÑе (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "ÐоÑаÑе навеÑÑи иденÑиÑикаÑÐ¾Ñ ÑÑанÑакÑиÑе (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "ÐоÑаÑе навеÑÑи име пакеÑа за ÑазÑеÑаваÑе"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "ÐоÑаÑе навеÑÑи име ÑизниÑе"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "ÐоÑаÑе навеÑÑи име, паÑамеÑÐ°Ñ Ð¸ вÑедноÑÑ ÑизниÑе"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "ÐоÑаÑе навеÑÑи ÑадÑÑ, нпÑ. âupdate-systemâ (ажÑÑиÑаÑе ÑиÑÑема)"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "ÐоÑаÑе навеÑÑи важеÑÑ ÑадÑÑ"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "ÐоÑаÑе навеÑÑи име пакеÑа"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "ÐоÑаÑе навеÑÑи âprovideâ низ (ÑÑа Ð¿Ð°ÐºÐµÑ Ð¿ÑÑжа)"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "ÐпÑиÑа â%sâ ниÑе подÑжана"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "ÐаÑедба ниÑе ÑÑпела"
@@ -542,11 +547,10 @@ msgstr "ÐоÑÑавиÑе име даÑоÑеке за меÑÑзавиÑноÑ
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr ""
-"ÐиÑекÑоÑиÑÑм за Ð¸Ð·Ð»Ð°Ð·Ð½Ñ Ð´Ð°ÑоÑÐµÐºÑ (ÑекÑÑи диÑекÑоÑиÑÑм Ñе коÑиÑÑиÑи ако ниÑе "
-"наведен)"
+"Ðзлазна даÑоÑека или диÑекÑоÑиÑÑм (коÑиÑÑи Ñе ÑекÑÑи диÑекÑоÑиÑÑм ако Ñе "
+"изоÑÑавÑено)"
#. TRANSLATORS: put a list of packages in the pack
#: ../client/pk-generate-pack.c:261
@@ -573,9 +577,9 @@ msgstr "Ðбе опÑиÑе изабÑане."
msgid "A output directory or file name is required"
msgstr "ÐоÑаÑе навеÑÑи име излазне даÑоÑеке или диÑекÑоÑиÑÑма"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
+msgid "The daemon failed to startup"
msgstr "Ðемон ниÑе ÑÑпео да Ñе покÑене"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
@@ -646,12 +650,12 @@ msgstr "СеÑвиÑна гÑÑпа Ñе напÑавÑена â%sâ"
msgid "Failed to create '%s': %s"
msgstr "ÐеÑÑпело пÑавÑеÑе â%sâ: %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "ÐеÑÑпео покÑÑÐ°Ñ Ð´Ð¾Ð±Ð°Ð²ÑаÑа ÑÑаÑа демона"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "ÐакеÑÐÐ¸Ñ ÑедаÑ"
@@ -710,42 +714,42 @@ msgid "Installing..."
msgstr "ÐнÑÑалиÑам..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "ÐÑеÑзимам деÑаÑе о извоÑима ÑоÑÑвеÑа."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr "ÐÑеÑзимам ÑпиÑкове даÑоÑека (ово може да поÑÑаÑе док Ñе не завÑÑи)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "ЧекаÑе на закÑÑÑаваÑе ÑпÑавника пакеÑа."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "УÑиÑавам ÑпиÑак пакеÑа."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "ÐаÑоÑека ниÑе пÑонаÑена"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "ÐеÑÑпеÑно покÑеÑаÑе:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "ÐеÑÑпеÑна инÑÑалаÑиÑа пакеÑа"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "ÐакеÑÐÐ¸Ñ Ð½Ð°Ñедба ниÑе наÑена"
@@ -755,51 +759,51 @@ msgid "Command not found."
msgstr "ÐаÑедба ниÑе наÑена."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "СлиÑна наÑедба Ñе:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "ÐокÑени ÑлиÑÐ½Ñ Ð½Ð°ÑедбÑ:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "СлиÑне наÑедбе ÑÑ:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "ÐзабеÑиÑе наÑÐµÐ´Ð±Ñ Ð·Ð° покÑеÑаÑе"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "ÐÐ°ÐºÐµÑ ÐºÐ¾Ñи пÑÑжа Ð¾Ð²Ñ Ð´Ð°ÑоÑÐµÐºÑ Ñе:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "Ðа инÑÑалиÑам Ð¿Ð°ÐºÐµÑ â%sâ коÑи пÑÑжа наÑÐµÐ´Ð±Ñ â%sâ?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "ÐакеÑи коÑи пÑÑжаÑÑ Ð¾Ð²Ñ Ð´Ð°ÑоÑÐµÐºÑ ÑÑ:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "ÐÑикладни пакеÑи ÑÑ:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "ÐзабеÑиÑе Ð¿Ð°ÐºÐµÑ Ð·Ð° инÑÑалаÑиÑÑ"
@@ -1993,25 +1997,25 @@ msgid "Show debugging information for all files"
msgstr "ÐÑикажи инÑоÑмаÑиÑе о оÑÐºÐ»Ð¾Ð½Ñ Ð³ÑеÑака за Ñве даÑоÑеке"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "ÐÑклон гÑеÑака овиÑ
изÑиÑиÑиÑ
модÑла"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "ÐÑклон гÑеÑака овиÑ
изÑиÑиÑиÑ
ÑÑнкÑиÑа"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "ÐапиÑи подаÑке о оÑÐºÐ»Ð¾Ð½Ñ Ð³ÑеÑака Ñ Ð´Ð°ÑоÑекÑ"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "ÐпÑиÑе за оÑклон гÑеÑака"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "ÐÑикажи опÑиÑе за оÑклон гÑеÑака"
@@ -2118,9 +2122,6 @@ msgstr "ÐÑикажи опÑиÑе за оÑклон гÑеÑака"
#~ msgid "Incorrect privileges for this operation"
#~ msgstr "ÐеиÑпÑавна овлаÑÑеÑа за Ð¾Ð²Ñ Ð¾Ð¿ÐµÑаÑиÑÑ"
-#~ msgid "The package could not be found"
-#~ msgstr "ÐÐ°ÐºÐµÑ Ð½Ð¸Ñе наÑен"
-
#~ msgid "You need to specify a search type, e.g. name"
#~ msgstr "ÐоÑаÑе навеÑÑи вÑÑÑÑ Ð¿ÑеÑÑаге, нпÑ. име"
commit c8971f45c7c3b90039d09f2ab47f2766ffa76dc9
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 13:14:20 2010 +0100
trivial: Fix two warnings from clang, neither of them look like bugs
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index e6d4834..fd0709e 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -320,6 +320,7 @@ pk_task_simulate_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskStat
/* remove all the original packages */
ret = FALSE;
+ length = g_strv_length (state->package_ids);
for (i=0; i<length; i++) {
if (g_strcmp0 (package_id, state->package_ids[i]) == 0) {
egg_debug ("removing %s", package_id);
diff --git a/src/pk-transaction-extra.c b/src/pk-transaction-extra.c
index d252c89..5f8f772 100644
--- a/src/pk-transaction-extra.c
+++ b/src/pk-transaction-extra.c
@@ -1039,6 +1039,8 @@ out:
* 4) The list of pids are converted to a list of files
* 5) The list of files is converted to a list of packages
* 6) For each package, emit a RequireRestart of the correct type (according to the UID)
+ *
+ * Return value: success, so %TRUE means the library check completed okay
**/
gboolean
pk_transaction_extra_check_library_restart_pre (PkTransactionExtra *extra, gchar **package_ids)
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index c78f2db..a0e9d33 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1534,6 +1534,10 @@ pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **packa
/* find files in security updates */
ret = pk_transaction_extra_check_library_restart_pre (transaction->priv->transaction_extra, package_ids_security);
+ if (!ret) {
+ egg_debug ("could not check the library list");
+ goto out;
+ }
out:
g_strfreev (package_ids_security);
return success;
commit d062c6b64d684a6c8ce9959c86b95e612a078f7d
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 13:13:55 2010 +0100
Fix up an unintialized g_free() spotted by clang
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index bc182da..8fee5fd 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -674,7 +674,7 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
gchar *line;
gchar *uri;
gchar *eulas;
- gchar *transaction_id;
+ gchar *transaction_id = NULL;
guint i;
GPtrArray *array;
gboolean ret;
commit 52e651a4cef05a01ca796e550cc529be5b322d01
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 10:36:36 2010 +0100
trivial: Remove some prototypes without bodies which caused warnings with gobject-introspection
diff --git a/lib/packagekit-glib2/pk-package-sack.h b/lib/packagekit-glib2/pk-package-sack.h
index 0fbaa1f..a05665c 100644
--- a/lib/packagekit-glib2/pk-package-sack.h
+++ b/lib/packagekit-glib2/pk-package-sack.h
@@ -39,7 +39,6 @@ G_BEGIN_DECLS
#define PK_IS_PACKAGE_SACK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_PACKAGE_SACK))
#define PK_IS_PACKAGE_SACK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_PACKAGE_SACK))
#define PK_PACKAGE_SACK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_PACKAGE_SACK, PkPackageSackClass))
-#define PK_PACKAGE_SACK_ERROR (pk_package_sack_error_quark ())
#define PK_PACKAGE_SACK_TYPE_ERROR (pk_package_sack_error_get_type ())
typedef struct _PkPackageSackPrivate PkPackageSackPrivate;
@@ -75,7 +74,6 @@ typedef enum {
PK_PACKAGE_SACK_SORT_TYPE_LAST
} PkPackageSackSortType;
-GQuark pk_package_sack_error_quark (void);
GType pk_package_sack_get_type (void);
PkPackageSack *pk_package_sack_new (void);
void pk_package_sack_test (gpointer user_data);
diff --git a/lib/packagekit-glib2/pk-package.h b/lib/packagekit-glib2/pk-package.h
index ef82f1c..96a7a40 100644
--- a/lib/packagekit-glib2/pk-package.h
+++ b/lib/packagekit-glib2/pk-package.h
@@ -39,7 +39,6 @@ G_BEGIN_DECLS
#define PK_IS_PACKAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_PACKAGE))
#define PK_IS_PACKAGE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_PACKAGE))
#define PK_PACKAGE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_PACKAGE, PkPackageClass))
-#define PK_PACKAGE_ERROR (pk_package_error_quark ())
#define PK_PACKAGE_TYPE_ERROR (pk_package_error_get_type ())
typedef struct _PkPackagePrivate PkPackagePrivate;
@@ -66,7 +65,6 @@ struct _PkPackageClass
void (*_pk_reserved5) (void);
};
-GQuark pk_package_error_quark (void);
GType pk_package_get_type (void);
PkPackage *pk_package_new (void);
void pk_package_test (gpointer user_data);
diff --git a/lib/packagekit-glib2/pk-progress.h b/lib/packagekit-glib2/pk-progress.h
index 51aa698..3aada72 100644
--- a/lib/packagekit-glib2/pk-progress.h
+++ b/lib/packagekit-glib2/pk-progress.h
@@ -38,7 +38,6 @@ G_BEGIN_DECLS
#define PK_IS_PROGRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_PROGRESS))
#define PK_IS_PROGRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_PROGRESS))
#define PK_PROGRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_PROGRESS, PkProgressClass))
-#define PK_PROGRESS_ERROR (pk_progress_error_quark ())
#define PK_PROGRESS_TYPE_ERROR (pk_progress_error_get_type ())
typedef struct _PkProgressPrivate PkProgressPrivate;
@@ -62,7 +61,6 @@ struct _PkProgressClass
void (*_pk_reserved5) (void);
};
-GQuark pk_progress_error_quark (void);
GType pk_progress_get_type (void);
PkProgress *pk_progress_new (void);
void pk_progress_test (gpointer user_data);
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index 82f08dc..aa82e38 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -51,7 +51,6 @@ G_BEGIN_DECLS
#define PK_IS_RESULTS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_RESULTS))
#define PK_IS_RESULTS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_RESULTS))
#define PK_RESULTS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_RESULTS, PkResultsClass))
-#define PK_RESULTS_ERROR (pk_results_error_quark ())
#define PK_RESULTS_TYPE_ERROR (pk_results_error_get_type ())
typedef struct _PkResultsPrivate PkResultsPrivate;
@@ -75,7 +74,6 @@ struct _PkResultsClass
void (*_pk_reserved5) (void);
};
-GQuark pk_results_error_quark (void);
GType pk_results_get_type (void);
PkResults *pk_results_new (void);
void pk_results_test (gpointer user_data);
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index de62c66..f128941 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -41,7 +41,6 @@ G_BEGIN_DECLS
#define PK_IS_TASK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_TASK))
#define PK_IS_TASK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_TASK))
#define PK_TASK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_TASK, PkTaskClass))
-#define PK_TASK_ERROR (pk_task_error_quark ())
#define PK_TASK_TYPE_ERROR (pk_task_error_get_type ())
typedef struct _PkTaskPrivate PkTaskPrivate;
@@ -80,7 +79,6 @@ struct _PkTaskClass
void (*_pk_reserved5) (void);
};
-GQuark pk_task_error_quark (void);
GType pk_task_get_type (void);
PkTask *pk_task_new (void);
void pk_task_test (gpointer user_data);
commit 84c92b6494bd91568567b75c35f91af2518e940d
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 10:34:37 2010 +0100
glib: add some more simple C accessors for package data
diff --git a/lib/packagekit-glib2/pk-package.c b/lib/packagekit-glib2/pk-package.c
index cf90caa..8fe7dad 100644
--- a/lib/packagekit-glib2/pk-package.c
+++ b/lib/packagekit-glib2/pk-package.c
@@ -52,6 +52,7 @@ struct _PkPackagePrivate
{
PkInfoEnum info;
gchar *package_id;
+ gchar **package_id_split;
gchar *summary;
gchar *license;
PkGroupEnum group;
@@ -190,6 +191,7 @@ pk_package_set_id (PkPackage *package, const gchar *package_id, GError **error)
/* save */
priv->package_id = g_strdup (package_id);
+ priv->package_id_split = g_strdupv (sections);
out:
g_strfreev (sections);
return ret;
@@ -247,6 +249,76 @@ pk_package_get_summary (PkPackage *package)
}
/**
+ * pk_package_get_name:
+ * @package: a valid #PkPackage instance
+ *
+ * Gets the package name.
+ *
+ * Return value: the name, or %NULL if unset
+ *
+ * Since: 0.6.4
+ **/
+const gchar *
+pk_package_get_name (PkPackage *package)
+{
+ g_return_val_if_fail (PK_IS_PACKAGE (package), NULL);
+ return package->priv->package_id_split[PK_PACKAGE_ID_NAME];
+}
+
+/**
+ * pk_package_get_version:
+ * @package: a valid #PkPackage instance
+ *
+ * Gets the package version.
+ *
+ * Return value: the version, or %NULL if unset
+ *
+ * Since: 0.6.4
+ **/
+const gchar *
+pk_package_get_version (PkPackage *package)
+{
+ g_return_val_if_fail (PK_IS_PACKAGE (package), NULL);
+ return package->priv->package_id_split[PK_PACKAGE_ID_VERSION];
+}
+
+/**
+ * pk_package_get_arch:
+ * @package: a valid #PkPackage instance
+ *
+ * Gets the package arch.
+ *
+ * Return value: the arch, or %NULL if unset
+ *
+ * Since: 0.6.4
+ **/
+const gchar *
+pk_package_get_arch (PkPackage *package)
+{
+ g_return_val_if_fail (PK_IS_PACKAGE (package), NULL);
+ return package->priv->package_id_split[PK_PACKAGE_ID_ARCH];
+}
+
+/**
+ * pk_package_get_data:
+ * @package: a valid #PkPackage instance
+ *
+ * Gets the package data, which is usually the repository ID that contains the
+ * package. Special ID's include "installed" for installed packages, and "local"
+ * for local packages that exist on disk but not in a repoitory.
+ *
+ * Return value: the data, or %NULL if unset
+ *
+ * Since: 0.6.4
+ **/
+const gchar *
+pk_package_get_data (PkPackage *package)
+{
+ g_return_val_if_fail (PK_IS_PACKAGE (package), NULL);
+ return package->priv->package_id_split[PK_PACKAGE_ID_DATA];
+}
+
+/**
* pk_package_print:
* @package: a valid #PkPackage instance
*
@@ -257,17 +329,14 @@ pk_package_get_summary (PkPackage *package)
void
pk_package_print (PkPackage *package)
{
- gchar **parts;
+ PkPackagePrivate *priv = package->priv;
g_return_if_fail (PK_IS_PACKAGE (package));
-
- parts = pk_package_id_split (package->priv->package_id);
g_print ("%s-%s.%s\t%s\t%s\n",
- parts[PK_PACKAGE_ID_NAME],
- parts[PK_PACKAGE_ID_VERSION],
- parts[PK_PACKAGE_ID_ARCH],
- parts[PK_PACKAGE_ID_DATA],
+ priv->package_id_split[PK_PACKAGE_ID_NAME],
+ priv->package_id_split[PK_PACKAGE_ID_VERSION],
+ priv->package_id_split[PK_PACKAGE_ID_ARCH],
+ priv->package_id_split[PK_PACKAGE_ID_DATA],
package->priv->summary);
- g_strfreev (parts);
}
/**
@@ -702,6 +771,7 @@ pk_package_finalize (GObject *object)
g_free (priv->update_changelog);
g_free (priv->update_issued);
g_free (priv->update_updated);
+ g_strfreev (priv->package_id_split);
G_OBJECT_CLASS (pk_package_parent_class)->finalize (object);
}
diff --git a/lib/packagekit-glib2/pk-package.h b/lib/packagekit-glib2/pk-package.h
index e0cc3ec..ef82f1c 100644
--- a/lib/packagekit-glib2/pk-package.h
+++ b/lib/packagekit-glib2/pk-package.h
@@ -74,15 +74,21 @@ void pk_package_test (gpointer user_data);
gboolean pk_package_set_id (PkPackage *package,
const gchar *package_id,
GError **error);
-const gchar *pk_package_get_id (PkPackage *package);
-PkInfoEnum pk_package_get_info (PkPackage *package);
-const gchar *pk_package_get_summary (PkPackage *package);
void pk_package_print (PkPackage *package);
gboolean pk_package_equal (PkPackage *package1,
PkPackage *package2);
gboolean pk_package_equal_id (PkPackage *package1,
PkPackage *package2);
+/* accessors */
+const gchar *pk_package_get_id (PkPackage *package);
+PkInfoEnum pk_package_get_info (PkPackage *package);
+const gchar *pk_package_get_summary (PkPackage *package);
+const gchar *pk_package_get_name (PkPackage *package);
+const gchar *pk_package_get_version (PkPackage *package);
+const gchar *pk_package_get_arch (PkPackage *package);
+const gchar *pk_package_get_data (PkPackage *package);
+
G_END_DECLS
#endif /* __PK_PACKAGE_H */
commit 6f293f11aa49c0421cdc5a3a4035f6714299bd4c
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 09:40:26 2010 +0100
yum: catch exceptions.IOError whenever we do a low-level yum call. Fixes rh#577549
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 1aa7ce4..9ccbeff 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -321,6 +321,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.yumbase.doLock(YUM_PID_FILE)
PackageKitBaseBackend.doLock(self)
self.allow_cancel(False)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except yum.Errors.LockError, e:
self.allow_cancel(True)
self.status(STATUS_WAITING_FOR_LOCK)
@@ -350,6 +352,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
try:
self.yumbase.closeRpmDB()
self.yumbase.doUnlock(YUM_PID_FILE)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -394,6 +398,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
available.append(pkg)
except yum.Errors.RepoError, e:
raise PkError(ERROR_NO_CACHE, "failed to use search generator: %s" %_to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -425,6 +431,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.status(STATUS_QUERY)
try:
self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
try:
@@ -443,6 +451,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
return
try:
self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
self.yumbase.conf.cache = 0 # Allow new files
@@ -461,6 +471,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for package in name_list:
try:
pkgs = self.yumbase.rpmdb.searchNevra(name=package)
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -473,6 +485,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
pkgs = self.yumbase.pkgSack.searchNames(names=name_list)
except yum.Errors.RepoError, e:
raise PkError(ERROR_NO_CACHE, "failed to search names: %s" %_to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
return pkgs
@@ -490,7 +504,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
raise PkError(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
except exceptions.IOError, e:
- raise PkError(ERROR_NO_SPACE_ON_DEVICE, _to_unicode(e))
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -499,6 +513,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for pkg in pkgs:
try:
instpo = self.yumbase.rpmdb.searchNevra(name=pkg.name, epoch=pkg.epoch, ver=pkg.ver, rel=pkg.rel, arch=pkg.arch)
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if len(instpo) > 0:
@@ -544,6 +560,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
raise PkError(ERROR_NO_CACHE, "failed to get groups from comps: %s" %_to_unicode(e))
except yum.Errors.GroupsError, e:
raise PkError(ERROR_GROUP_NOT_FOUND, _to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -568,6 +586,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.allow_cancel(True)
try:
self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
self.yumbase.conf.cache = 0 # TODO: can we just look in the cache?
@@ -638,6 +658,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.allow_cancel(True)
try:
self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
self.yumbase.conf.cache = 0 # TODO: can we just look in the cache?
@@ -648,6 +670,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# Now show installed packages.
try:
pkgs = self.yumbase.rpmdb
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
pkgfilter.add_installed(pkgs)
@@ -659,6 +683,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to get package sack: %s" %_to_unicode(e), exit=False)
return
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -690,6 +716,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for value in values:
try:
pkgs = self.yumbase.rpmdb.searchFiles(value)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
pkgfilter.add_installed(pkgs)
@@ -703,6 +731,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to search sack: %s" %_to_unicode(e), exit=False)
return
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -781,6 +811,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to get provides for sack: %s" %_to_unicode(e), exit=False)
return
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -801,6 +833,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
cats = self.yumbase.comps.categories
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to get comps list: %s" %_to_unicode(e), exit=False)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -837,6 +871,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for grp_id in self.comps.get_groups(cat):
try:
grp = self.yumbase.comps.return_group(grp_id)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if grp:
@@ -890,6 +926,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to search package sack: %s" %_to_unicode(e), exit=False)
return
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -903,6 +941,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self._show_package(pkg_download, INFO_DOWNLOADING)
try:
repo = self.yumbase.repos.getRepo(pkg_download.repoid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
remote = pkg_download.returnSimple('relativepath')
@@ -941,12 +981,16 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if repo == 'meta':
try:
grp = self.yumbase.comps.return_group(name)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
isGroup = True
elif name[0] == '@':
try:
grp = self.yumbase.comps.return_group(name[1:])
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
isGroup = True
@@ -975,6 +1019,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# search the rpmdb for the nevra
try:
pkgs = self.yumbase.rpmdb.searchNevra(name=n, epoch=e, ver=v, rel=r, arch=a)
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
# if the package is found, then return it (do not have to match the repo_id)
@@ -985,6 +1031,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# searches all repos and takes 66ms
try:
repos = self.yumbase.repos.findRepos(repo)
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if len(repos) == 0:
@@ -997,6 +1045,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# populate the sack with data
try:
self.yumbase.repos.populateSack(repo)
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -1005,6 +1055,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
pkgs = repos[0].sack.searchNevra(name=n, epoch=e, ver=v, rel=r, arch=a)
except yum.Errors.RepoError, e:
raise PkError(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -1047,6 +1099,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
else:
try:
txmbrs = self.yumbase.groupRemove(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
for txmbr in self.yumbase.tsInfo:
@@ -1065,6 +1119,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
resolve_list.append(pkg)
try:
txmbrs = self.yumbase.remove(po=pkg)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
percentage += bump
@@ -1075,6 +1131,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
rc, msgs = self.yumbase.buildTransaction()
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if rc != 2:
@@ -1099,6 +1157,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# search only for requested arch
try:
ret = self.yumbase.rpmdb.installed(po=pkg)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
return ret
@@ -1122,6 +1182,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
try:
exactarchlist = self.yumbase.conf.exactarchlist
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
# we look through each returned possibility and rule out the
@@ -1133,6 +1195,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# everything installed that matches the name
try:
installedByKey = self.yumbase.rpmdb.searchNevra(name=pkg.name, arch=pkg.arch)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
comparable = []
@@ -1164,6 +1228,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if ematch:
try:
ret = self.yumbase.allowedMultipleInstalls(pkg)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if ret:
@@ -1185,6 +1251,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
n, a, e, v, r = pkgi.pkgtup
try:
pkgs = self.yumbase.rpmdb.searchNevra(name=n, epoch=e, ver=v, arch=a)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
for pkg in pkgs:
@@ -1215,6 +1283,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# get the dep list
try:
results = self.yumbase.findDeps(pkgs)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
require_list = []
@@ -1254,11 +1324,15 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if not grp.installed:
try:
txmbrs = self.yumbase.selectGroup(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
try:
txmbrs = self.yumbase.groupRemove(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
pkgs = []
@@ -1267,11 +1341,15 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if not grp.installed:
try:
self.yumbase.deselectGroup(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
try:
self.yumbase.groupUnremove(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
return pkgs
@@ -1296,6 +1374,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
else:
try:
txmbrs = self.yumbase.selectGroup(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
for txmbr in self.yumbase.tsInfo:
@@ -1303,6 +1383,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# unselect what we previously selected
try:
self.yumbase.deselectGroup(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -1318,6 +1400,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
txmbrs = self.yumbase.install(po=pkg)
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
percentage += bump
@@ -1327,6 +1411,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
rc, msgs = self.yumbase.buildTransaction()
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if rc != 2:
@@ -1445,6 +1531,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
signed = repo.gpgcheck
except yum.Errors.RepoError, e:
raise PkError(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
return signed
@@ -1475,6 +1563,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
txmbr = self.yumbase.update() # Add all updates to Transaction
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e), exit=False)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -1549,6 +1639,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.yumbase.doGroupSetup()
except yum.Errors.GroupsError, e:
pass
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
#we might have a rounding error
@@ -1581,6 +1673,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.percentage(None)
try:
self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
self.yumbase.conf.cache = 0 # TODO: can we just look in the cache?
@@ -1595,6 +1689,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if FILTER_NOT_INSTALLED not in filters:
try:
pkgs = self.yumbase.rpmdb.searchNevra(name=package)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -1610,6 +1706,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to return newest by package sack: %s" %_to_unicode(e), exit=False)
return
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -1660,6 +1758,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
txmbr = self.yumbase.selectGroup(grp.groupid)
if not txmbr:
self.error(ERROR_GROUP_NOT_FOUND, "No packages were found in the %s group for %s." % (grp.groupid, _format_package_id(package_id)))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
txmbrs.extend(txmbr)
@@ -1708,6 +1808,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
pass
except yum.Errors.RepoError, e:
pass
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if pkgs:
@@ -1802,6 +1904,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.error(ERROR_INVALID_PACKAGE_FILE, "%s does not appear to be a valid package." % inst_file)
except yum.Errors.YumBaseError, e:
self.error(ERROR_INVALID_PACKAGE_FILE, 'Package could not be decompressed')
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except:
self.error(ERROR_UNKNOWN, "Failed to open local file -- please report")
else:
@@ -1842,6 +1946,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.MiscError:
self.error(ERROR_INVALID_PACKAGE_FILE, "%s does not appear to be a valid package." % inst_file, exit=False)
return
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
try:
@@ -1851,6 +1957,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.error(ERROR_MISSING_GPG_SIGNATURE, _to_unicode(e), exit=False)
return
self.message (MESSAGE_UNTRUSTED_PACKAGE, "The package %s is untrusted" % po.name)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -1864,6 +1972,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for inst_file in inst_files:
try:
txmbr = self.yumbase.installLocal(inst_file)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if txmbr:
@@ -1895,6 +2005,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for inst_file in inst_files:
try:
txmbr = self.yumbase.installLocal(inst_file)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if txmbr:
@@ -1926,6 +2038,9 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.MiscError:
self.error(ERROR_INVALID_PACKAGE_FILE, "%s does not appear to be a valid package." % pkg, exit=False)
return False
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+ return False
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
return False
@@ -1992,6 +2107,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if pkg:
try:
txmbr = self.yumbase.update(po=pkg)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if not txmbr:
@@ -2053,6 +2170,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
raise PkError(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
except yum.Errors.PackageSackError, e:
raise PkError(ERROR_PACKAGE_DATABASE_CHANGED, _to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -2064,6 +2183,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
message += " : %s" % _format_msgs(msgs)
except yum.Errors.RepoError, e:
raise PkError(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -2130,6 +2251,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
raise PkError(ERROR_PACKAGE_CONFLICTS, message)
else:
raise PkError(ERROR_TRANSACTION_ERROR, message)
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -2166,6 +2289,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.error(ERROR_PACKAGE_NOT_INSTALLED, "This Group %s is not installed" % grp.groupid)
try:
txmbr = self.yumbase.groupRemove(grp.groupid)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
txmbrs.extend(txmbr)
@@ -2178,6 +2303,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if pkg and inst:
try:
txmbr = self.yumbase.remove(po=pkg)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
txmbrs.extend(txmbr)
@@ -2189,6 +2316,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
rc, msgs = self.yumbase.buildTransaction()
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if rc != 2:
@@ -2416,7 +2545,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
except exceptions.IOError, e:
- self.error(ERROR_NO_SPACE_ON_DEVICE, _to_unicode(e))
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -2443,6 +2572,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
changelog = pkg.returnChangelog()
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -2490,6 +2621,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.message(MESSAGE_REPO_FOR_DEVELOPERS_ONLY, warning.replace("\n", ";"))
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_FOUND, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
@@ -2507,6 +2640,9 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
try:
repos = self.yumbase.repos.repos.values()
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
+ return
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
return
@@ -2524,6 +2660,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
if obsoleting[0] == name:
pkg = self.yumbase.rpmdb.searchPkgTuple(installed)[0]
return self._pkg_to_id(pkg)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
pass # no obsolete data - fd#17528
return ""
@@ -2531,6 +2669,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
def _get_updated(self, pkg):
try:
pkgs = self.yumbase.rpmdb.searchNevra(name=pkg.name, arch=pkg.arch)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if pkgs:
@@ -2544,6 +2684,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for repo in self.yumbase.repos.listEnabled():
try:
self._updateMetadata.add(repo)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
pass # No updateinfo.xml.gz in repo
return self._updateMetadata
@@ -2640,6 +2782,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
instpkg = None
try:
instpkgs = self.yumbase.rpmdb.searchNevra(name=pkg.name)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
if len(instpkgs) == 1:
@@ -2650,6 +2794,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
changes = pkg.returnChangelog()
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
for change in changes:
@@ -2697,6 +2843,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
repo = self.yumbase.repos.getRepo(repoid)
except yum.Errors.RepoError, e:
self.error(ERROR_REPO_NOT_FOUND, "repo '%s' cannot be found in list" % repoid, exit=False)
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
else:
@@ -2728,6 +2876,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.yumbase.getKeyForRepo(repo, callback = lambda x: True)
except yum.Errors.YumBaseError, e:
self.error(ERROR_UNKNOWN, "cannot install signature: %s" % str(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_GPG_FAILURE, "Error importing GPG Key for the %s repository: %s" % (repo, str(e)))
else: # This is a package signature
@@ -2741,6 +2891,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.yumbase.getKeyForPackage(pkg, askcb = lambda x, y, z: True)
except yum.Errors.YumBaseError, e:
self.error(ERROR_UNKNOWN, "cannot install signature: %s" % str(e))
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
except:
@@ -2779,6 +2931,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
for repo in self.yumbase.repos.listEnabled():
try:
repo.repoXML
+ except exceptions.IOError, e:
+ self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except yum.Errors.RepoError, e:
self.yumbase.repos.disableRepo(repo.id)
self.message(MESSAGE_REPO_METADATA_DOWNLOAD_FAILED, "Could not contact source '%s', so it will be disabled" % repo.id)
@@ -2958,6 +3112,8 @@ class PackageKitCallback(RPMBaseCallback):
try:
self.base.status(TransactionsStateMap[action])
self._showName(TransactionsInfoMap[action])
+ except exceptions.IOError, e:
+ self.base.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except exceptions.KeyError, e:
self.base.message(MESSAGE_BACKEND_ERROR, "The constant '%s' was unknown, please report. details: %s" % (action, _to_unicode(e)))
@@ -3053,6 +3209,8 @@ class PackageKitYumBase(yum.YumBase):
pc.disabled_plugins = disabled_plugins
except yum.Errors.ConfigError, e:
raise PkError(ERROR_REPO_CONFIGURATION_ERROR, _to_unicode(e))
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except ValueError, e:
raise PkError(ERROR_FAILED_CONFIG_PARSING, _to_unicode(e))
@@ -3068,6 +3226,8 @@ class PackageKitYumBase(yum.YumBase):
try:
self.repos.confirm_func = self._repo_gpg_confirm
self.repos.gpg_import_func = self._repo_gpg_import
+ except exceptions.IOError, e:
+ raise PkError(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
# helpfully, yum gives us TypeError when it can't open the rpmdb
if str(e).find('rpmdb open failed') != -1:
commit 0da7f62bf7d8cc34a04c6d2721edd3f00286ecba
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 7 09:39:20 2010 +0100
yum: Ensure we force a cache update if the comps groups cannot be loaded
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 0d608ed..1aa7ce4 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -240,7 +240,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.package_summary_cache = {}
self.comps = yumComps(self.yumbase)
if not self.comps.connect():
- self.refresh_cache()
+ self.refresh_cache(True)
if not self.comps.connect():
self.error(ERROR_GROUP_LIST_INVALID, 'comps categories could not be loaded')
commit 44b63a9d0204c9cbb5d4700ffa5e51b8bf08b17d
Author: Richard Hughes <richard at hughsie.com>
Date: Tue Apr 6 15:37:30 2010 +0100
trivial: sync spec file with fedora upstream
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 293f899..ffcfb53 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -18,8 +18,6 @@ Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.gz
Requires: dbus >= %{dbus_version}
Requires: dbus-glib >= %{dbus_glib_version}
Requires: PackageKit-glib = %{version}-%{release}
-Requires: PackageKit-gtk-module = %{version}-%{release}
-Requires: PackageKit-yum-plugin = %{version}-%{release}
Requires: PackageKit-yum = %{version}-%{release}
Requires: shared-mime-info
Requires: comps-extras
commit dcf9aaf5fada567a06e7a3aacbb797e01f3372a8
Author: warrink <warrink at fedoraproject.org>
Date: Sun Apr 4 10:14:11 2010 +0000
l10n: Updates to Dutch (Flemish) (nl) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/nl.po b/po/nl.po
index 59e4859..4e823bd 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -2,132 +2,133 @@
# R.E. van der Luit <nippur at fedoraproject.org>, 2009.
# Geert Warrink <geert.warrink at onsnet.nu>, 2009.
# Richard van der Luit <nippur at fedoraproject.org>, 2009, 2010.
+# Geert Warrink <geert.warrink at onsnet.nu>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: packagekit.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-10 09:24+0000\n"
-"PO-Revision-Date: 2010-03-10 10:31+0100\n"
-"Last-Translator: Richard van der Luit <nippur at fedoraproject.org>\n"
-"Language-Team: Dutch <nl at li.org>\n"
+"POT-Creation-Date: 2010-04-04 08:18+0000\n"
+"PO-Revision-Date: 2010-04-04 12:13+0200\n"
+"Last-Translator: Geert Warrink <geert.warrink at onsnet.nu>\n"
+"Language-Team: nl <fedora-trans-list at redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
+"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: Dutch\n"
"X-Generator: KBabel 1.11.4\n"
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "Transactie"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "Systeemtijd"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "Geslaagd"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "Waar"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "Niet waar"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "Rol"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "Duur"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(seconden)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Commando regel"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "Gebruiker ID"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "Gebruikernaam"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "Werkelijke naam"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "Betreffende pakketten"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "Betreffende pakketten: Geen"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "Distributie"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Type"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "Samenvatting"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "Categorie"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "ID"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "Ouder"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Naam"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Icoon"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "Details van de vernieuwing:"
@@ -136,7 +137,7 @@ msgstr "Details van de vernieuwing:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -146,165 +147,165 @@ msgstr[0] "Pakket"
msgstr[1] "Pakketten"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "Vernieuwingen"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "Verouderde pakketten"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "Verkoper"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Herstarten"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "Vernieuw tekst"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "Veranderingen"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "Status"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "Uitgegeven"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Vernieuwd"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "Aangezit"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "Uitgezet"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Herstart systeem vereist door:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "Het is vereist het systeem te herstarten:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Herstart systeem (beveiliging) vereist door:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "Herstart sessie (beveiliging) vereist door:"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Herstart vereist door toepassing:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "Pakketomschrijving"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "Bericht:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Geen bestanden"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Pakketbestanden"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "Percentage"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "Status"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "Resultaten:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Fatale fout"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "De transactie faalde"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "Er zijn op dit moment geen vernieuwingen beschikbaar."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "Er zijn op dit moment geen upgrades beschikbaar."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "Herstart a.u.b de computer om de verneuwing af te maken."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "Log a.u.b uit en weer in om de vernieuwing af te maken."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -313,36 +314,36 @@ msgstr ""
"beveiligings vernieuwingen geïnstaleerd zijn."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
msgstr "Log a.u.b. uit en weer in om de verniewing af te maken."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"Verwachtte pakketnaam, maar kreeg een bestand. Probeer in plaats daarvan "
"'pkcon install-local %s' te gebruiken."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Dit programma kon geen enkel beschikbaar pakket %s vinden."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Dit programma kon het geïinstallerde pakket %s niet vinden."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Dit programma kon het pakket %s niet vinden."
@@ -351,64 +352,64 @@ msgstr "Dit programma kon het pakket %s niet vinden."
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Dit programma kon niet alle pakketten vinden: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "De service is midden in de transactie gecrashed!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "PackageKit console-interface"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "Subopdrachten:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr ""
"Verkrijgen van de tijd tussen laatste actie en deze actie is niet gelukt"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Programmaversie tonen en sluiten"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "Filter instellen, bijvoorbeeld geïnstalleerd"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "Afsluiten zonder te wachten tot de transacties zijn afgerond"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Installeer het pakket zonder goedkeuring te vragen"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Voer het commando uit met gebruik van onbenutte netwerk bandbreedte en ook "
"om minder vermogen te gebruiken"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -416,117 +417,122 @@ msgstr ""
"widgets te gebruiken"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Contact met PackageKit krijgen mislukte."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "De proxy kon niet ingesteld worden"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "De opgegeven filter was ongeldig"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "Een zoektype is verplicht, b.v. naam"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "Een zoekterm is vereist"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "Ongeldig zoektype"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "Een pakketnaam om te installeren is vereist"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "Een bestandsnaam om te installeren is vereist"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "Er moet een type worden opgegeven, key_id of package_id"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "Een te verwijderen pakketnaam is vereist"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "Een doelmap en dan de namen van te downloaden pakketten zijn vereist"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "Map niet gevonden"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "Een licentie indentificatie (eula-id) is vereis"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "Een transactie indentificatie (tid) is vereist"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "Een pakketnaam om te gebruiken is vereist"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "Een naam van een repository is vereist"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "Een repo naam, parameter en waarde zijn vereist"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "Een actie, b.v. 'update-system' is vereist"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "Een correcte rol is vereist"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Een pakketnaam is vereist"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "Een pakket geleverde string is vereist"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "Optie '%s' wordt niet ondersteund"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "Opdracht mislukt"
@@ -538,10 +544,9 @@ msgstr ""
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr ""
-"Het doelbestand of map (huidige map wordt gebruikt als dit niet wordt "
+"Het doel bestand of map (de huidige map wordt gebruikt als dit niet wordt "
"opgegeven)"
#. TRANSLATORS: put a list of packages in the pack
@@ -569,10 +574,10 @@ msgstr "Beide opties geselecteerd."
msgid "A output directory or file name is required"
msgstr "Een doelmap of bestandsnaam is vereist"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
-msgstr "De daemon faalde op te starten"
+msgid "The daemon failed to startup"
+msgstr "De daemon faalde om op te starten"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
#. TRANSLATORS: This is when the backend doesn't have the capability to download
@@ -643,12 +648,12 @@ msgstr "Servicepack aangemaakt '%s'"
msgid "Failed to create '%s': %s"
msgstr "'%s' aanmaken niet gelukt: %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "Daemon toestand verkrijgen mislukte."
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "PackageKit-monitor"
@@ -707,42 +712,42 @@ msgid "Installing..."
msgstr "Aan het installeren......"
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "Download details over de software bronnen."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr "Bestands lijsten downloaden (dit kan enige tijd duren)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "Wachten op pakket beheerder blokkering."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "Lijst van pakketten downloaden."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Zoeken naar bestand niet gelukt"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Starten mislukt:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "Kon pakketen niet installeren"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "PackageKit Command niet gevonden"
@@ -752,51 +757,51 @@ msgid "Command not found."
msgstr "Commando niet gevonden."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "Een gelijkend commando is:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "Start gelijkend commando:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "Gelijkende commando's zijn:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "Kies alstublieft een commando om te starten"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "Het pakket dat dit bestand levert is:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "Pakket '%s' installeren om commando '%s' te verkrijgen?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "Pakketten die dit bestand leveren zijn:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "Geschikte pakketten zijn:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "Kies alstublieft een pakket om te installeren"
@@ -967,7 +972,7 @@ msgstr "Pakketten niet installeren in de simulatie mode"
#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
#. TRANSLATORS: transaction state, installing packages
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
#, c-format
msgid "Installing packages"
msgstr "Pakketten installeren"
@@ -1104,7 +1109,7 @@ msgid "Please enter a number from 1 to %i: "
msgstr "Voer een nummer in van 1 tot %i: "
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:185
msgid "More than one package matches:"
msgstr "Er zijn meerdere pakketten die overeenkomen:"
@@ -1114,448 +1119,448 @@ msgid "Please choose the correct package: "
msgstr "Kies alstublieft het juiste pakket: "
#. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:251
msgid "Unknown state"
msgstr "Onbekende toestand"
#. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
msgid "Starting"
msgstr "Opstarten"
#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
msgid "Waiting in queue"
msgstr "Wachten in wachtrij"
#. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
msgstr "Draaiende"
#. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
msgid "Querying"
msgstr "Informatie ophalen"
#. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
msgstr "Informatie krijgen"
#. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
msgid "Removing packages"
msgstr "Pakketten verwijderen"
#. TRANSLATORS: transaction state, downloading package files
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
msgid "Downloading packages"
msgstr "Pakketten aan het downloaden"
#. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
msgstr "Software lijst verversen"
#. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
msgid "Installing updates"
msgstr "Vernieuwingen installeren"
#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
msgid "Cleaning up packages"
msgstr "Pakketten opschonen"
#. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
msgid "Obsoleting packages"
msgstr "Pakketten achterhaald maken"
#. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
msgid "Resolving dependencies"
msgstr "Afhankelijkheden oplossen"
#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
msgid "Checking signatures"
msgstr "Ondertekeningen controleren"
#. TRANSLATORS: transaction state, when we return to a previous system state
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
msgid "Rolling back"
msgstr "Terug draaien"
#. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
msgstr "Veranderingen testen"
#. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
msgstr "Veranderingen beschikbaar maken"
#. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
msgid "Requesting data"
msgstr "Data aanvragen"
#. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
msgid "Finished"
msgstr "Klaar"
#. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
msgstr "Afbreken"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
msgid "Downloading repository information"
msgstr "Repository informatie downloaden"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
msgid "Downloading list of packages"
msgstr "Lijst van pakketten downloaden"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
msgstr "Bestandslijsten downloaden"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
msgstr "Lijst van veranderingen downloaden."
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
msgid "Downloading groups"
msgstr "Groepen downloaden"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
msgid "Downloading update information"
msgstr "Pakketinformatie downloaden"
#. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
msgstr "Bestanden opnieuw inpakken"
#. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
msgid "Loading cache"
msgstr "Cache laden"
#. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
msgid "Scanning applications"
msgstr "Toepassingen doorzoeken"
#. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
msgid "Generating package lists"
msgstr "Pakketlijst aanmaken"
#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
msgid "Waiting for package manager lock"
msgstr "Wachten op pakket beheerder blokkering"
#. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
msgstr "Wachten op authenticatie"
#. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
msgid "Updating running applications"
msgstr "Draaiende toepassingen vernieuwen"
#. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
msgid "Checking applications in use"
msgstr "Controleren van toepassingen in gebruik"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
msgstr "Controleren van bibliotheken in gebruik"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
msgid "Copying files"
msgstr "Bestanden kopiëren"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:413
msgid "Trivial"
msgstr "Triviaal"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
msgid "Normal"
msgstr "Normaal"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
msgid "Important"
msgstr "Belangrijk"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
msgid "Security"
msgstr "Beveiliging"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
msgstr "Fout reparatie"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
msgid "Enhancement"
msgstr "Verbetering"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
msgid "Blocked"
msgstr "Geblokkeerd"
#. TRANSLATORS: The state of a package
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
msgid "Installed"
msgstr "Geïnstalleerd"
#. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:447
msgid "Available"
msgstr "Beschikbaar"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:465
msgid "Downloading"
msgstr "Downloaden"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
msgid "Updating"
msgstr "Vernieuwen"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
msgid "Installing"
msgstr "Installeren"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
msgid "Removing"
msgstr "Verwijderen"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
msgid "Cleaning up"
msgstr "Opschonen"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
msgid "Obsoleting"
msgstr "Verouderd maken"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
msgid "Reinstalling"
msgstr "Hergeïnstalleerd"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:507
msgid "Downloaded"
msgstr "Downloaden"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
msgid "Removed"
msgstr "Verwijderd"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
msgstr "Opgeruimd"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
msgstr "Verouderd"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
msgstr "Herge"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
msgstr "Onbekend rol type"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
msgid "Getting dependencies"
msgstr "Afhankelijkheden ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
msgid "Getting update details"
msgstr "Vernieuwings details ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
msgid "Getting details"
msgstr "Details ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
msgid "Getting requires"
msgstr "Vereisten ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
msgid "Getting updates"
msgstr "Vernieuwingen ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
msgid "Searching by details"
msgstr "Opzoeken volgens details"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
msgid "Searching by file"
msgstr "Opzoeken volgens bestand"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
msgid "Searching groups"
msgstr "Opzoeken volgens groepen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
msgid "Searching by name"
msgstr "Opzoeken volgens naam"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
msgid "Installing files"
msgstr "Bestanden installeren"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
msgstr "Cache verversen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
msgid "Updating packages"
msgstr "Pakketten vernieuwen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
msgstr "Systeem vernieuwen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
msgid "Canceling"
msgstr "Afbreken"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
msgid "Getting repositories"
msgstr "Repositories ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
msgid "Enabling repository"
msgstr "Repository aanzetten"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
msgstr "Data instellen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
msgid "Resolving"
msgstr "Oplossen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
msgid "Getting file list"
msgstr "Bestandslijst ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
msgid "Getting provides"
msgstr "Voorzieningen ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
msgid "Installing signature"
msgstr "Onderstekening installeren"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
msgid "Getting packages"
msgstr "Pakketten ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
msgstr "EULA accepteren"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
msgid "Getting upgrades"
msgstr "Vernieuwingen ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
msgid "Getting categories"
msgstr "Categorieën ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
msgid "Getting transactions"
msgstr "Transcaties ophalen"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
msgid "Simulating install"
msgstr "Installatie simuleren"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
msgid "Simulating remove"
msgstr "Verwijderen simuleren"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
msgstr "Vernieuwing simuleren"
@@ -1997,25 +2002,25 @@ msgid "Show debugging information for all files"
msgstr "Toon debuginformatie voor alle bestanden"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "Debug deze specifieke modules"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "Debug deze specifieke functies"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "Log debuggingdata naar een file"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "Debugging Opties"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "Toon debugopties"
commit 1025e26da681cfefa29980f00495a03e28185448
Author: logan <logan at fedoraproject.org>
Date: Sat Apr 3 17:44:45 2010 +0000
l10n: Updates to Spanish (Castilian) (es) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/es.po b/po/es.po
index 7e47401..94b6c9e 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-02 14:15+0000\n"
-"PO-Revision-Date: 2010-04-02 13:17-0300\n"
+"POT-Creation-Date: 2010-04-03 16:16+0000\n"
+"PO-Revision-Date: 2010-04-03 14:43-0300\n"
"Last-Translator: Héctor Daniel Cabrera <logan at fedoraproject.org>\n"
"Language-Team: Fedora Spanish <trans-es at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -36,7 +36,7 @@ msgstr "Hora del sistema"
#. TRANSLATORS: this is if the transaction succeeded or not
#: ../client/pk-console.c:180
msgid "Succeeded"
-msgstr "Existosa"
+msgstr "Exitosa"
#: ../client/pk-console.c:180
msgid "True"
@@ -51,7 +51,7 @@ msgstr "Falso"
#: ../client/pk-console.c:182
#: ../src/pk-polkit-action-lookup.c:332
msgid "Role"
-msgstr "Rol"
+msgstr "Función"
#. TRANSLATORS: this is The duration of the transaction
#: ../client/pk-console.c:187
@@ -72,7 +72,7 @@ msgstr "LÃnea de comandos"
#. TRANSLATORS: this is the user ID of the user that started the action
#: ../client/pk-console.c:193
msgid "User ID"
-msgstr "ID del usuario"
+msgstr "ID de usuario"
#. TRANSLATORS: this is the username, e.g. hughsie
#: ../client/pk-console.c:200
@@ -86,11 +86,11 @@ msgstr "Nombre real"
#: ../client/pk-console.c:212
msgid "Affected packages:"
-msgstr "Paquete afectados:"
+msgstr "Paquetes involucrados:"
#: ../client/pk-console.c:214
msgid "Affected packages: None"
-msgstr "Paquetes afectados: Ninguno"
+msgstr "Paquetes involucrados: Ninguno"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
#: ../client/pk-console.c:249
@@ -107,7 +107,7 @@ msgstr "Tipo"
#: ../client/pk-console.c:253
#: ../client/pk-console.c:292
msgid "Summary"
-msgstr "Resúmen"
+msgstr "Resumen"
#. TRANSLATORS: this is the group category name
#: ../client/pk-console.c:281
@@ -298,7 +298,7 @@ msgstr "La transacción no pudo realizarse"
#. TRANSLATORS: print a message when there are no updates
#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
-msgstr "No hay actualizaciones disponibles en este momento."
+msgstr "En este momento no existen actualizaciones disponibles."
#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
@@ -312,23 +312,23 @@ msgstr "Reinicie el equipo para completar la actualización."
#. TRANSLATORS: a package needs to restart the session
#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
-msgstr "Cierre la sesión y vuelva a entrar para completar la actualización."
+msgstr "Cierre la sesión y vuelva a ingresar para completar la actualización."
#. TRANSLATORS: a package needs to restart their system (due to security)
#: ../client/pk-console.c:823
msgid "Please restart the computer to complete the update as important security updates have been installed."
-msgstr "Por favor, reinicie el equipo para completar la actualización, ya que se han instalado actualizaciones de seguridad importantes."
+msgstr "Por favor, debido a que se han instalado actualizaciones de seguridad importantes, reinicie el equipo para completar la actualización. "
#. TRANSLATORS: a package needs to restart the session (due to security)
#: ../client/pk-console.c:826
msgid "Please logout and login to complete the update as important security updates have been installed."
-msgstr "Por favor, cierre la sesión y vuelva a registrarse para completar la actualización, ya que se han instalado actualizaciones de seguridad importantes."
+msgstr "Por favor, debido a que se han instalado actualizaciones de seguridad importantes, cierre la sesión y vuelva a registrarse para completar la actualización."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
#: ../client/pk-console.c:852
#, c-format
-msgid "Extected package name, actually got file. Try using 'pkcon install-local %s' instead."
-msgstr "Nombre de paquete esperado, actualmente tiene archivo. Trate de usar 'pkcon install-local %s' en su lugar."
+msgid "Expected package name, actually got file. Try using 'pkcon install-local %s' instead."
+msgstr "Se esperaba el nombre de un paquete, pero se obtuvo un archivo. En su lugar, trate de utilizar 'pkcon install-local %s'."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
#: ../client/pk-console.c:860
@@ -365,7 +365,7 @@ msgstr "Esta herramienta no pudo encontrar todos los paquetes: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
-msgstr "El demonio se colgó en medio de una transacción."
+msgstr "¡El demonio se ha caÃdo en plena transacción!"
#. TRANSLATORS: This is the header to the --help menu
#: ../client/pk-console.c:1147
@@ -391,7 +391,7 @@ msgstr "Mostrar la versión del programa y salir"
#. TRANSLATORS: command line argument, use a filter to narrow down results
#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
-msgstr "Establecer el filtro, ej. instalado"
+msgstr "Establecer el filtro, p. ej. instalado"
#. TRANSLATORS: command line argument, work asynchronously
#: ../client/pk-console.c:1273
@@ -407,12 +407,12 @@ msgstr "Instalar los paquetes sin confirmación"
#. TRANSLATORS: command line argument, this command is not a priority
#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
-msgstr "Corra el comando usando ancho de bando libre y también usando menos potencia"
+msgstr "Ejecuta el comando utilizando menos potencia, y el ancho de bando libre"
#. TRANSLATORS: command line argument, just output without fancy formatting
#: ../client/pk-console.c:1282
msgid "Print to screen a machine readable output, rather than using animated widgets"
-msgstr "Imprimir en la pantalla una salida legible por una máquina, en vez de usar controles animados"
+msgstr "Imprime en la pantalla una salida legible por una máquina, en lugar de utilizar widgets animados"
#. TRANSLATORS: we failed to contact the daemon
#: ../client/pk-console.c:1304
@@ -533,7 +533,7 @@ msgstr "Se necesita la cadena de lo que proporciona el paquete"
#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
-msgstr "La opción «%s» no está soportada"
+msgstr "La opción '%s' no está soportada"
#. TRANSLATORS: Generic failure of what they asked to do
#: ../client/pk-console.c:1734
@@ -547,13 +547,13 @@ msgstr "Establezca el nombre del archivo de dependencias para excluir"
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid "The output file or directory (the current directory is used if ommitted)"
-msgstr "El directorio o archivo de salida (se usará si se omite el directorio actual)"
+msgid "The output file or directory (the current directory is used if omitted)"
+msgstr "El directorio o archivo de salida (si se imite, será utilizado el directorio actual)"
#. TRANSLATORS: put a list of packages in the pack
#: ../client/pk-generate-pack.c:261
msgid "The package to be put into the service pack"
-msgstr "El paquete será puesto en el paquete de servicio"
+msgstr "El paquete a ser colocado en el paquete de servicio"
#. TRANSLATORS: put all pending updates in the pack
#: ../client/pk-generate-pack.c:264
@@ -563,7 +563,7 @@ msgstr "Poner todas las actualizaciones disponibles en el paquete de servicio"
#. TRANSLATORS: This is when the user fails to supply the correct arguments
#: ../client/pk-generate-pack.c:300
msgid "Neither --package or --updates option selected."
-msgstr "No se seleccionó ni la opción --package o --updates."
+msgstr "No se seleccionó la opción --package o --updates."
#. TRANSLATORS: This is when the user fails to supply just one argument
#: ../client/pk-generate-pack.c:308
@@ -575,10 +575,10 @@ msgstr "Se seleccionaron ambas opciones."
msgid "A output directory or file name is required"
msgstr "Se necesita un directorio o nombre de archivo de salida"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
-msgstr "Fallo del demonio en el inicio"
+msgid "The daemon failed to startup"
+msgstr "El demonio falló al tratar de iniciarse"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
#. TRANSLATORS: This is when the backend doesn't have the capability to download
@@ -600,12 +600,12 @@ msgstr "Si especifica un archivo, el nombre del paquete de servicio debe finaliz
#. TRANSLATORS: This is when file already exists
#: ../client/pk-generate-pack.c:393
msgid "A pack with the same name already exists, do you want to overwrite it?"
-msgstr "Ya existe un paquete con ese nombre, ¿desea sobreescribirlo?"
+msgstr "Ya existe un paquete con ese nombre, ¿desea sobrescribirlo?"
#. TRANSLATORS: This is when the pack was not overwritten
#: ../client/pk-generate-pack.c:396
msgid "The pack was not overwritten."
-msgstr "No se sobreescribió el paquete."
+msgstr "No se sobrescribió el paquete."
#. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
#: ../client/pk-generate-pack.c:409
@@ -626,7 +626,7 @@ msgstr "Buscando el nombre de paquete."
#: ../client/pk-generate-pack.c:434
#, c-format
msgid "Failed to find package '%s': %s"
-msgstr "Falló al buscar el paquete «%s»: %s"
+msgstr "Falló al buscar el paquete '%s': %s"
#. TRANSLATORS: This is telling the user we are in the process of making the pack
#: ../client/pk-generate-pack.c:442
@@ -637,13 +637,13 @@ msgstr "Creando el paquete de servicio..."
#: ../client/pk-generate-pack.c:457
#, c-format
msgid "Service pack created '%s'"
-msgstr "Paquete de servicio «%s» creado"
+msgstr "Ha sido creado el paquete de servicio '%s'"
#. TRANSLATORS: we failed to make te file
#: ../client/pk-generate-pack.c:462
#, c-format
msgid "Failed to create '%s': %s"
-msgstr "Falló al crear «%s»: %s"
+msgstr "Falló al crear '%s': %s"
#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
@@ -726,7 +726,7 @@ msgstr "Esperando bloqueo del administrador de paquetes."
#. TRANSLATORS: loading package cache so we can search
#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
-msgstr "Cargando listas de paquetes"
+msgstr "Cargando listas de paquetes."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
#: ../contrib/command-not-found/pk-command-not-found.c:424
@@ -761,7 +761,7 @@ msgstr "Un comando similar es:"
#. TRANSLATORS: Ask the user if we should run the similar command
#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
-msgstr "Ejecutar un comando similar:"
+msgstr "Ejecuta un comando similar:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
@@ -784,7 +784,7 @@ msgstr "El paquete que proporciona este archivo es:"
#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
-msgstr "¿Instalar el paquete «%s» para proporcionar el comando «%s»?"
+msgstr "¿Instalar el paquete '%s' para proporcionar el comando '%s'?"
#. TRANSLATORS: Show the user a list of packages that provide this command
#: ../contrib/command-not-found/pk-command-not-found.c:804
@@ -794,7 +794,7 @@ msgstr "Los paquetes que proporcionan este archivo son:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
-msgstr "Los posibles paquetes son:"
+msgstr "Los paquetes posibles son:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
@@ -816,7 +816,7 @@ msgstr "No se ha podido encontrar el paquete %s, o tal vez ya se encuentre insta
#. command line argument, simulate what would be done, but don't actually do it
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:518
msgid "Don't actually install any packages, only simulate what would be installed"
-msgstr "No se instala ningún paquete realmente, solo se indica cuáles serÃan instalados"
+msgstr "No se instala ningún paquete, solo se indica cuáles serÃan instalados"
#. command line argument, do we skip packages that depend on the ones specified
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:521
@@ -1029,26 +1029,26 @@ msgstr "Falló al registrar el controlador"
#. TRANSLATORS: user did not specify a device sysfs path that exists
#: ../contrib/device-rebind/pk-device-rebind.c:261
msgid "Device path not found"
-msgstr "Dirección de dispositivo no encontrado"
+msgstr "No se ha encontrado la ruta de dispositivo"
#. TRANSLATORS: user did not specify a valid device sysfs path
#: ../contrib/device-rebind/pk-device-rebind.c:269
msgid "Incorrect device path specified"
-msgstr "Dirección de dispositivo especificada incorrecta"
+msgstr "Se ha especificado una ruta de dispositivo incorrecta"
#: ../contrib/device-rebind/pk-device-rebind.c:294
msgid "Show extra debugging information"
-msgstr "Mostrar información extra de depuración"
+msgstr "Muestra información extra de depuración"
#. command line argument, simulate what would be done, but don't actually do it
#: ../contrib/device-rebind/pk-device-rebind.c:297
msgid "Don't actually touch the hardware, only simulate what would be done"
-msgstr "No tocar el hardware, solamente simular lo que se harÃa"
+msgstr "No toca el hardware, solamente simula lo que se harÃa"
#. TRANSLATORS: command line option: a list of files to install
#: ../contrib/device-rebind/pk-device-rebind.c:300
msgid "Device paths"
-msgstr "Dirección de dispositivo"
+msgstr "Rutas de dispositivo"
#. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
#: ../contrib/device-rebind/pk-device-rebind.c:315
@@ -1058,32 +1058,32 @@ msgstr "Recargador de Dispositivo de PackageKit"
#. TRANSLATORS: user did not specify a valid device sysfs path
#: ../contrib/device-rebind/pk-device-rebind.c:323
msgid "You need to specify at least one valid device path"
-msgstr "Necesita especificar al menos una dirección de dispositivo válida"
+msgstr "Necesita especificar al menos una ruta de dispositivo válida"
#. TRANSLATORS: user did not specify a valid device sysfs path
#: ../contrib/device-rebind/pk-device-rebind.c:333
msgid "This script can only be used by the root user"
-msgstr "Este script sólo puede ser usado por el usuario root"
+msgstr "Este script sólo puede ser utilizado por el usuario root"
#. TRANSLATORS: we're going to verify the path first
#: ../contrib/device-rebind/pk-device-rebind.c:342
msgid "Verifying device path"
-msgstr "Verificando dirección de dispositivo"
+msgstr "Verificando ruta de dispositivo"
#. TRANSLATORS: user did not specify a device sysfs path that exists
#: ../contrib/device-rebind/pk-device-rebind.c:347
msgid "Failed to verify device path"
-msgstr "Falló al verificar la dirección del dispositivo"
+msgstr "Falló al verificar la ruta del dispositivo"
#. TRANSLATORS: we're going to try
#: ../contrib/device-rebind/pk-device-rebind.c:361
msgid "Attempting to rebind device"
-msgstr "Intentando reconectar dispositivo"
+msgstr "Intentando volver a asociar dispositivo"
#. TRANSLATORS: we failed to release the current driver
#: ../contrib/device-rebind/pk-device-rebind.c:366
msgid "Failed to rebind device"
-msgstr "Falló al reconectar el dispositivo"
+msgstr "Falló al reasociar el dispositivo"
#: ../data/packagekit-catalog.xml.in.h:1
msgid "PackageKit Catalog"
@@ -1100,7 +1100,7 @@ msgstr "Paquete de servicio de PackageKit"
#: ../lib/packagekit-glib2/pk-console-shared.c:59
#, c-format
msgid "Please enter a number from 1 to %i: "
-msgstr "Introduzca un número de 1 a %i: "
+msgstr "Introduzca un número del 1 al %i: "
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
#: ../lib/packagekit-glib2/pk-console-shared.c:185
@@ -1130,7 +1130,7 @@ msgstr "Esperando en cola"
#. TRANSLATORS: transaction state, just started
#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
-msgstr "Corriendo"
+msgstr "Ejecutando"
#. TRANSLATORS: transaction state, is querying data
#: ../lib/packagekit-glib2/pk-console-shared.c:267
@@ -1140,7 +1140,7 @@ msgstr "Consultando"
#. TRANSLATORS: transaction state, getting data from a server
#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
-msgstr "Obteniendo.información"
+msgstr "Obteniendo información"
#. TRANSLATORS: transaction state, removing packages
#: ../lib/packagekit-glib2/pk-console-shared.c:275
@@ -1157,7 +1157,7 @@ msgstr "Descargando paquetes"
#. TRANSLATORS: transaction state, refreshing internal lists
#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
-msgstr "Refrescando listado de software"
+msgstr "Actualizando la lista de software"
#. TRANSLATORS: transaction state, installing updates
#: ../lib/packagekit-glib2/pk-console-shared.c:291
@@ -1194,12 +1194,12 @@ msgstr "Retrocediendo"
#. TRANSLATORS: transaction state, when we're doing a test transaction
#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
-msgstr "Comprobando cambios"
+msgstr "Comprobando modificaciones"
#. TRANSLATORS: transaction state, when we're writing to the system package database
#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
-msgstr "Realizando cambios"
+msgstr "Realizando modificaciones"
#. TRANSLATORS: transaction state, requesting data from a server
#: ../lib/packagekit-glib2/pk-console-shared.c:323
@@ -1214,7 +1214,7 @@ msgstr "Finalizado"
#. TRANSLATORS: transaction state, in the process of cancelling
#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
-msgstr "Cancelado"
+msgstr "Cancelando"
#. TRANSLATORS: transaction state, downloading metadata
#: ../lib/packagekit-glib2/pk-console-shared.c:335
@@ -1229,12 +1229,12 @@ msgstr "Descargando listas de paquetes"
#. TRANSLATORS: transaction state, downloading metadata
#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
-msgstr "Descargando listados de archivos"
+msgstr "Descargando listas de archivos"
#. TRANSLATORS: transaction state, downloading metadata
#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
-msgstr "Descargando listas de cambios"
+msgstr "Descargando listas de modificaciones"
#. TRANSLATORS: transaction state, downloading metadata
#: ../lib/packagekit-glib2/pk-console-shared.c:351
@@ -1249,7 +1249,7 @@ msgstr "Descargando información de la actualización"
#. TRANSLATORS: transaction state, repackaging delta files
#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
-msgstr "Empaquetando archivos"
+msgstr "Volviendo a empaquetar archivos"
#. TRANSLATORS: transaction state, loading databases
#: ../lib/packagekit-glib2/pk-console-shared.c:363
@@ -1274,7 +1274,7 @@ msgstr "Esperando bloqueo del administrador de paquetes"
#. TRANSLATORS: transaction state, waiting for user to type in a password
#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
-msgstr "Esperando por la autentificación"
+msgstr "Esperando autenticación"
#. TRANSLATORS: transaction state, we are updating the list of processes
#: ../lib/packagekit-glib2/pk-console-shared.c:383
@@ -1289,7 +1289,7 @@ msgstr "Comprobando aplicaciones en uso"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
-msgstr "Comprobando LibrerÃas en uso"
+msgstr "Comprobando bibliotecas en uso"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
#: ../lib/packagekit-glib2/pk-console-shared.c:395
@@ -1319,7 +1319,7 @@ msgstr "Seguridad"
#. TRANSLATORS: The type of update
#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
-msgstr "Corrijiendo error"
+msgstr "Solución de error"
#. TRANSLATORS: The type of update
#: ../lib/packagekit-glib2/pk-console-shared.c:433
@@ -1395,22 +1395,22 @@ msgstr "Eliminados"
#. TRANSLATORS: The action of the package, in past tense
#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
-msgstr "Limpiados"
+msgstr "Limpios"
#. TRANSLATORS: The action of the package, in past tense
#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
-msgstr "Obsoleto"
+msgstr "Obsoletos"
#. TRANSLATORS: The action of the package, in past tense
#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
-msgstr "Reinstalado"
+msgstr "Reinstalados"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
-msgstr "Tipo de rol desconocido"
+msgstr "Tipo de función desconocido"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:553
@@ -1465,7 +1465,7 @@ msgstr "Instalando archivos"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
-msgstr "Refrescando caché"
+msgstr "Actualizando el caché"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:605
@@ -1475,7 +1475,7 @@ msgstr "Actualizando paquetes"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
-msgstr "Actualizando sistema"
+msgstr "Actualizando el sistema"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:613
@@ -1495,7 +1495,7 @@ msgstr "Habilitando repositorio"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
-msgstr "Poniendo datos"
+msgstr "Definiendo los datos"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:633
@@ -1525,7 +1525,7 @@ msgstr "Obteniendo paquetes"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
-msgstr "Aceptando EULA"
+msgstr "Aceptando el Acuerdo de licencia de usuario final (EULA, por las iniciales en inglés de End User License Agreement)"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:661
@@ -1556,7 +1556,7 @@ msgstr "Simulando eliminación"
#. TRANSLATORS: The role of the transaction, in present tense
#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
-msgstr "Sumulando la actualización"
+msgstr "Simulando la actualización"
#. TRANSLATORS: ask the user if they are comfortable installing insecure packages
#: ../lib/packagekit-glib2/pk-task-text.c:69
@@ -1651,7 +1651,7 @@ msgstr "Etiqueta del medio"
#. TRANSLATORS: the media description, usually like 'Fedora 12 disk 5'
#: ../lib/packagekit-glib2/pk-task-text.c:276
msgid "Text"
-msgstr "TExto"
+msgstr "Texto"
#. TRANSLATORS: ask the user to insert the media
#: ../lib/packagekit-glib2/pk-task-text.c:282
@@ -1666,32 +1666,32 @@ msgstr "El medio correcto no fue insertado."
#. TRANSLATORS: When processing, we might have to remove other dependencies
#: ../lib/packagekit-glib2/pk-task-text.c:302
msgid "The following packages have to be removed:"
-msgstr "Se eliminarán los siguientes paquetes:"
+msgstr "Los siguientes paquetes deben ser eliminados:"
#. TRANSLATORS: When processing, we might have to install other dependencies
#: ../lib/packagekit-glib2/pk-task-text.c:307
msgid "The following packages have to be installed:"
-msgstr "Los siguientes paquetes se deben instalar:"
+msgstr "Los siguientes paquetes tienen que ser instalados:"
#. TRANSLATORS: When processing, we might have to update other dependencies
#: ../lib/packagekit-glib2/pk-task-text.c:312
msgid "The following packages have to be updated:"
-msgstr "Los siguientes paquetes se deben actualizar:"
+msgstr "Los siguientes paquetes tienen que ser actualizados:"
#. TRANSLATORS: When processing, we might have to reinstall other dependencies
#: ../lib/packagekit-glib2/pk-task-text.c:317
msgid "The following packages have to be reinstalled:"
-msgstr "Los siguientes paquetes se deben reinstalar:"
+msgstr "Los siguientes paquetes tienen que ser reinstalados:"
#. TRANSLATORS: When processing, we might have to downgrade other dependencies
#: ../lib/packagekit-glib2/pk-task-text.c:322
msgid "The following packages have to be downgraded:"
-msgstr "Los siguientes paquetes se deben desactualizar:"
+msgstr "Los siguientes paquetes tienen que ser desactualizados:"
#. TRANSLATORS: ask the user if the proposed changes are okay
#: ../lib/packagekit-glib2/pk-task-text.c:382
msgid "Proceed with changes?"
-msgstr "¿Proceder con los cambios?"
+msgstr "¿Continuar con las modificaciones?"
#. TRANSLATORS: tell the user we didn't do anything
#: ../lib/packagekit-glib2/pk-task-text.c:387
@@ -1710,51 +1710,51 @@ msgstr "Aceptar EULA"
#: ../policy/org.freedesktop.packagekit.policy.in.h:8
msgid "Authentication is required to accept a EULA"
-msgstr "Se necesita autenticación para aceptar una EULA"
+msgstr "Es necesario autenticarse para aceptar un EULA"
#: ../policy/org.freedesktop.packagekit.policy.in.h:9
msgid "Authentication is required to cancel a task that was not started by yourself"
-msgstr "Se necesita autenticación para cancelar una tarea que no inició usted"
+msgstr "Es necesario autenticarse para cancelar una tarea que usted no ha iniciado"
#: ../policy/org.freedesktop.packagekit.policy.in.h:10
msgid "Authentication is required to change software source parameters"
-msgstr "Se necesita autenticación para cambiar los parámetros de fuente de software"
+msgstr "Es necesario autenticarse para modificar parámetros de una fuente de software"
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid "Authentication is required to consider a key used for signing packages as trusted"
-msgstr "Se necesita autenticación para considerar una clave usada para firmar paquetes como confiable"
+msgstr "Es necesario autenticarse para considerar confiable a una clave utilizada para identificar paquetes"
#: ../policy/org.freedesktop.packagekit.policy.in.h:12
msgid "Authentication is required to install a signed package"
-msgstr "Se necesita autenticación para instalar un paquete firmado"
+msgstr "Es necesario autenticarse para instalar un paquete firmado"
#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install an untrusted package"
-msgstr "Se necesita autenticación para instalar un paquete no confiable"
+msgstr "Es necesario autenticarse para instalar un paquete no confiable"
#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to refresh the system sources"
-msgstr "Se necesita autenticación para refrescar las fuentes del sistema"
+msgstr "Es necesario autenticarse para actualizar las fuentes del sistema"
#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to reload the device with a new driver"
-msgstr "Se necesita autenticación para recargar el dispositivo con un controlador nuevo"
+msgstr "Es necesario autenticarse para recargar el dispositivo con un controlador nuevo"
#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to remove packages"
-msgstr "Se necesita autenticación para eliminar paquetes"
+msgstr "Es necesario autenticarse para eliminar paquetes"
#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to rollback a transaction"
-msgstr "Se necesita autenticación para deshacer una transacción"
+msgstr "Es necesario autenticarse para deshacer una transacción"
#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to set the network proxy used for downloading packages"
-msgstr "Se necesita autenticación para cambiar el proxy de red usado para descargar paquetes"
+msgstr "Es necesario autenticarse para modificar el proxy de red utilizado para descargar paquetes"
#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid "Authentication is required to update packages"
-msgstr "Se necesita autenticación para actualizar paquetes"
+msgstr "Es necesario autenticarse para actualizar paquetes"
#. SECURITY:
#. - Normal users are allowed to cancel their own task without
@@ -1772,7 +1772,7 @@ msgstr "Cancelar tarea externa"
#.
#: ../policy/org.freedesktop.packagekit.policy.in.h:31
msgid "Change software source parameters"
-msgstr "Cambiar los parámetros de fuente de software"
+msgstr "Modificar los parámetros de fuente de software"
#. SECURITY:
#. - Normal users do not need authentication to install signed packages
@@ -1800,7 +1800,7 @@ msgstr "Instalar archivo local no-confiable"
#.
#: ../policy/org.freedesktop.packagekit.policy.in.h:50
msgid "Refresh system sources"
-msgstr "Refrescar las fuentes del sistema"
+msgstr "Actualizar las fuentes del sistema"
#. SECURITY:
#. - Normal users require admin authentication to rebind a driver
@@ -1851,7 +1851,7 @@ msgstr "Establecer el proxy de la red"
#.
#: ../policy/org.freedesktop.packagekit.policy.in.h:86
msgid "Trust a key used for signing packages"
-msgstr "Confiar en una llave usada para firmar paquetes"
+msgstr "Confiar en una llave utilizada para firmar paquetes"
#. SECURITY:
#. - Normal users do not require admin authentication to update the
@@ -1872,12 +1872,12 @@ msgstr "El arranque falló debido a polÃticas de seguridad en esta máquina."
#. TRANSLATORS: only two ways this can fail...
#: ../src/pk-main.c:89
msgid "This can happen for two reasons:"
-msgstr "Esto puede pasar por dos razones:"
+msgstr "Esto puede suceder por dos razones:"
#. TRANSLATORS: only allowed to be owned by root
#: ../src/pk-main.c:91
msgid "The correct user is not launching the executable (usually root)"
-msgstr "El usuario correcto no esta lanzando el ejecutable (generalmente root)"
+msgstr "El usuario correcto no esta iniciando el ejecutable (generalmente root)"
#. TRANSLATORS: or we are installed in a prefix
#: ../src/pk-main.c:93
@@ -1887,12 +1887,12 @@ msgstr "El archivo org.freedesktop.PackageKit.conf no está instalado en el dire
#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
#: ../src/pk-main.c:199
msgid "Packaging backend to use, e.g. dummy"
-msgstr "Administrador de paquetes que usar, ej. dummy"
+msgstr "Motor de paquetes a ser utilizado, ej. dummy"
#. TRANSLATORS: if we should run in the background
#: ../src/pk-main.c:202
msgid "Daemonize and detach from the terminal"
-msgstr "Demonizar y desacoplar de la terminal"
+msgstr "Demonizar y desasociar de la terminal"
#. TRANSLATORS: if we should not monitor how long we are inactive for
#: ../src/pk-main.c:205
@@ -1912,7 +1912,7 @@ msgstr "Salir después de una pequeña pausa"
#. TRANSLATORS: exit straight away, used for automatic profiling
#: ../src/pk-main.c:214
msgid "Exit after the engine has loaded"
-msgstr "Salir después de que el motor este cargado"
+msgstr "Salir después que sea cargado el motor"
#. TRANSLATORS: describing the service that is running
#: ../src/pk-main.c:229
@@ -1945,7 +1945,7 @@ msgstr "No actualice este paquete a menos que sepa con certeza que es seguro hac
#: ../src/pk-polkit-action-lookup.c:177
msgid "Do not update these packages unless you are sure it is safe to do so."
-msgstr "No actualice estos paquete a menos que sepa con certeza que es seguro hacerlo."
+msgstr "No actualice estos paquetes a menos que sepa con certeza que es seguro hacerlo."
#: ../src/pk-polkit-action-lookup.c:195
msgid "Do not install this package unless you are sure it is safe to do so."
@@ -1953,7 +1953,7 @@ msgstr "No instale este paquete a menos que sepa con certeza que es seguro hacer
#: ../src/pk-polkit-action-lookup.c:196
msgid "Do not install these packages unless you are sure it is safe to do so."
-msgstr "No instale estos paquete a menos que sepa con certeza que es seguro hacerlo."
+msgstr "No instale estos paquetes a menos que sepa con certeza que es seguro hacerlo."
#. TRANSLATORS: too many packages to list each one
#: ../src/pk-polkit-action-lookup.c:273
commit 0e674e4f4fc54670dcd0d8c46df9c07be949e78f
Author: raven <raven at fedoraproject.org>
Date: Sat Apr 3 11:35:41 2010 +0000
l10n: Updates to Polish (pl) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/pl.po b/po/pl.po
index d9d426f..f8d6c60 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-02 10:29+0000\n"
-"PO-Revision-Date: 2010-04-02 12:54+0200\n"
+"POT-Creation-Date: 2010-04-03 11:30+0000\n"
+"PO-Revision-Date: 2010-04-03 13:35+0200\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <trans-pl at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -324,7 +324,7 @@ msgstr ""
#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"Oczekiwano nazwy pakietu, otrzymano plik. ProszÄ zamiast tego spróbowaÄ "
@@ -543,10 +543,9 @@ msgstr "ProszÄ ustawiÄ nazwy plików zależnoÅci do wykluczenia"
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr ""
-"Plik lub katalog wyjÅcia (użyty zostanie bieżÄ
cy katalog, jeÅli zostanie "
+"Plik lub katalog wyjÅciowy (użyty zostanie bieżÄ
cy katalog, jeÅli zostanie "
"pominiÄte)"
#. TRANSLATORS: put a list of packages in the pack
@@ -572,11 +571,11 @@ msgstr "Wybrano obie opcje."
#. TRANSLATORS: This is when the user fails to supply the output
#: ../client/pk-generate-pack.c:324
msgid "A output directory or file name is required"
-msgstr "Wymagany jest katalog lub nazwa pliku wyjÅcia"
+msgstr "Wymagany jest katalog lub nazwa pliku wyjÅciowego"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
+msgid "The daemon failed to startup"
msgstr "Uruchomienie demona nie powiodÅo siÄ"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
commit 0a0c741e1968add33bf3f63bfbc2cc4d672889d6
Author: yurchor <yurchor at fedoraproject.org>
Date: Sat Apr 3 05:57:11 2010 +0000
l10n: Updates to Ukrainian (uk) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/uk.po b/po/uk.po
index c8659a7..f7a3967 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-02 14:15+0000\n"
-"PO-Revision-Date: 2010-04-02 20:17+0300\n"
+"POT-Creation-Date: 2010-04-03 04:18+0000\n"
+"PO-Revision-Date: 2010-04-03 08:56+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
"Language-Team: Ukrainian <translation at linux.org.ua>\n"
"MIME-Version: 1.0\n"
@@ -326,7 +326,7 @@ msgstr ""
#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"Ðало бÑÑи пеÑедано Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка, пеÑедано Ñайл. СпÑобÑйÑе ÑкоÑиÑÑаÑиÑÑ "
@@ -545,8 +545,7 @@ msgstr "ÐкажÑÑÑ Ð½Ð°Ð·Ð²Ð¸ ÑайлÑв залежноÑÑей, ÑÐºÑ Ñ
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr ""
"Файл або каÑалог Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
(ÑкÑо пÑопÑÑÑиÑи, бÑде викоÑиÑÑано поÑоÑний "
"каÑалог)"
@@ -576,9 +575,9 @@ msgstr "ÐбÑано обидва паÑамеÑÑа."
msgid "A output directory or file name is required"
msgstr "СлÑд вказаÑи каÑалог або Ñайл Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
+msgid "The daemon failed to startup"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑÑÑиÑи ÑÐ¾Ð½Ð¾Ð²Ñ ÑлÑжбÑ"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
commit a215659436fd2a1abf2295b844d73008235c8f21
Author: Yuri Chornoivan <yurchor at ukr.net>
Date: Fri Apr 2 20:47:13 2010 +0100
Fix up three typos in translated strings
Signed-off-by: Richard Hughes <richard at hughsie.com>
diff --git a/client/pk-console.c b/client/pk-console.c
index d9c1317..24a4402 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -849,7 +849,7 @@ pk_console_install_packages (gchar **packages, GError **error)
ret = !g_file_test (packages[i], G_FILE_TEST_EXISTS);
if (!ret) {
/* TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm' */
- *error = g_error_new (1, 0, _("Extected package name, actually got file. Try using 'pkcon install-local %s' instead."), packages[i]);
+ *error = g_error_new (1, 0, _("Expected package name, actually got file. Try using 'pkcon install-local %s' instead."), packages[i]);
goto out;
}
}
diff --git a/client/pk-generate-pack.c b/client/pk-generate-pack.c
index 4959428..1b2da1d 100644
--- a/client/pk-generate-pack.c
+++ b/client/pk-generate-pack.c
@@ -255,7 +255,7 @@ main (int argc, char *argv[])
_("Set the file name of dependencies to be excluded"), NULL},
{ "output", 'o', 0, G_OPTION_ARG_STRING, &directory,
/* TRANSLATORS: the output location */
- _("The output file or directory (the current directory is used if ommitted)"), NULL},
+ _("The output file or directory (the current directory is used if omitted)"), NULL},
{ "package", 'p', 0, G_OPTION_ARG_STRING, &package,
/* TRANSLATORS: put a list of packages in the pack */
_("The package to be put into the service pack"), NULL},
@@ -338,8 +338,8 @@ main (int argc, char *argv[])
control = pk_control_new ();
ret = pk_control_get_properties (control, NULL, &error);
if (!ret) {
- /* TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup */
- g_print ("%s: %s\n", _("The dameon failed to startup"), error->message);
+ /* TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup */
+ g_print ("%s: %s\n", _("The daemon failed to startup"), error->message);
goto out;
}
commit 6d937aaeab8173494ae4aa4ac018311c5ace2131
Author: yurchor <yurchor at fedoraproject.org>
Date: Fri Apr 2 17:17:53 2010 +0000
l10n: Updates to Ukrainian (uk) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/uk.po b/po/uk.po
index 5bbb994..c8659a7 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-10 17:38+0000\n"
-"PO-Revision-Date: 2010-03-10 20:19+0200\n"
+"POT-Creation-Date: 2010-04-02 14:15+0000\n"
+"PO-Revision-Date: 2010-04-02 20:17+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
"Language-Team: Ukrainian <translation at linux.org.ua>\n"
"MIME-Version: 1.0\n"
@@ -20,115 +20,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "ÐпеÑаÑÑÑ"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "СиÑÑемний ÑаÑ"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "УÑпÑÑне"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "Так"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "ÐÑ"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "РолÑ"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "ТÑивалÑÑÑÑ"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(ÑекÑнд)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Ðомандний ÑÑдок"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "ÐРкоÑиÑÑÑваÑа"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "ÐоÑиÑÑÑваÑ"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "СпÑÐ°Ð²Ð¶Ð½Ñ ÑмâÑ"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "ÐадÑÑÐ½Ñ Ð¿Ð°ÐºÑнки:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "ÐадÑÑÐ½Ñ Ð¿Ð°ÐºÑнки: ÐемаÑ"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "ÐиÑÑÑибÑÑив"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Тип"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "РезÑме"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "ÐаÑегоÑÑÑ"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "ÐÐ"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "ÐаÑÑкÑвÑÑка"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Ðазва"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "ÐнаÑок"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "ÐодÑобиÑÑ Ñодо оновленнÑ:"
@@ -137,7 +137,7 @@ msgstr "ÐодÑобиÑÑ Ñодо оновленнÑ:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -148,165 +148,165 @@ msgstr[1] "ÐакÑнки"
msgstr[2] "ÐакÑнки"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "ÐновлÑÑ"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "РобиÑÑ Ð·Ð°ÑÑаÑÑлим"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "ÐоÑÑаÑалÑник"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "ÐеÑезапÑÑк"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "ТекÑÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "ÐмÑни"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "СÑан"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "ÐипÑÑено"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Ðновлено"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "УвÑмкнено"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "Ðимкнено"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "ÐеÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑиÑÑеми поÑÑÑбне длÑ:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "ÐеÑезапÑÑк ÑеанÑÑ Ð¿Ð¾ÑÑÑбен:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "ÐоÑÑÑбне пеÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑиÑÑеми (безпека) длÑ:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "ÐоÑÑÑбен пеÑезапÑÑк ÑеанÑÑ (безпека):"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "ÐоÑÑÑбен пеÑезапÑÑк пÑогÑами длÑ:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "ÐÐ¿Ð¸Ñ Ð¿Ð°ÐºÑнка"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "ÐовÑдомленнÑ:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Ðез ÑайлÑв"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Файли пакÑнка"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "ÐÑдÑоÑки"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "СÑан"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "РезÑлÑÑаÑ:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "ÐÑиÑиÑна помилка"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑаÑÑÑ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдаÑÑ"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "Ðа поÑоÑний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð½Ðµ виÑвлено."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "Ðа поÑоÑний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð½Ðµ виÑвлено."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "Щоб завеÑÑиÑи оновленнÑ, пеÑезаванÑажÑе ÑиÑÑемÑ."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "Щоб завеÑÑиÑи оновленнÑ, вийдÑÑÑ Ð· облÑкового запиÑÑ Ñ ÑвÑйдÑÑÑ Ð·Ð½Ð¾Ð²Ñ."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -314,7 +314,7 @@ msgstr ""
"пеÑезаванÑажÑе ÑиÑÑемÑ, Ñоб завеÑÑиÑи вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¸Ñ
Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
@@ -323,7 +323,7 @@ msgstr ""
"запиÑÑ Ñ ÑвÑйдÑÑÑ Ð´Ð¾ нÑого зновÑ."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
"Extected package name, actually got file. Try using 'pkcon install-local %s' "
@@ -333,19 +333,19 @@ msgstr ""
"ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ñ Â«pkcon install-local %s»."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "ÐÑогÑÐ°Ð¼Ñ Ð½Ðµ вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи жодного доÑÑÑпного пакÑнка: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "ÐÑогÑÐ°Ð¼Ñ Ð½Ðµ вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи вÑÑановлений пакÑнок: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "ÐÑогÑÐ°Ð¼Ñ Ð½Ðµ вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи пакÑнок: %s"
@@ -354,63 +354,63 @@ msgstr "ÐÑогÑÐ°Ð¼Ñ Ð½Ðµ вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи пакÑнок: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "ÐÑогÑÐ°Ð¼Ñ Ð½Ðµ вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи вÑÑ Ð¿Ð°ÐºÑнки: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "ÐваÑÑйне завеÑÑÐµÐ½Ð½Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби пÑд ÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÑÑ!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "ÐонÑолÑний ÑнÑеÑÑÐµÐ¹Ñ PackageKit"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "ÐÑдкоманди:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°ÑиÑи ÑаÑ, коли ÑÑ Ð´ÑÑ Ð±Ñло виконано воÑÑаннÑ"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "ÐоказаÑи веÑÑÑÑ Ð¿ÑогÑами Ñ Ð·Ð°Ð²ÐµÑÑиÑи ÑобоÑÑ"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "ÐÑÑановиÑи ÑÑлÑÑÑ, напÑиклад, вÑÑановленÑ"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "ÐавеÑÑиÑи ÑобоÑÑ, не ÑекаÑÑи на завеÑÑÐµÐ½Ð½Ñ Ð´ÑÑ"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "ÐÑÑановиÑи пакÑнки без запиÑÑ Ñодо пÑдÑвеÑдженнÑ"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"ÐиконаÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð· мÑнÑмалÑним викоÑиÑÑаннÑм меÑежевого ÐºÐ°Ð½Ð°Ð»Ñ Ñ Ð¼ÐµÐ½ÑÐ¾Ñ "
"виÑÑаÑÐ¾Ñ ÑеÑÑÑÑÑв ÑиÑÑеми"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -418,118 +418,123 @@ msgstr ""
"анÑмованиÑ
вÑджеÑÑв"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Ðе вдалоÑÑ Ð·Ð²âÑзаÑиÑÑ Ð· PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "Ðе вдалоÑÑ Ð²ÑÑановиÑи паÑамеÑÑи пÑокÑÑ-ÑеÑвеÑа"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "Ðказано некоÑекÑний ÑÑлÑÑÑ"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "Тип поÑÑкÑ, ÑкÑо Ñакий поÑÑÑбен, напÑиклад, назва"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "ÐоÑÑÑбен клÑÑ Ð¿Ð¾ÑÑкÑ"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "ÐекоÑекÑний Ñип поÑÑкÑ"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка, Ñкий ÑлÑд вÑÑановиÑи"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ñайла, Ñкий ÑлÑд вÑÑановиÑи"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "СлÑд вказаÑи Ñип, ÑденÑиÑÑкаÑÐ¾Ñ ÐºÐ»ÑÑа Ñ ÑденÑиÑÑкаÑÐ¾Ñ Ð¿Ð°ÐºÑнка"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка, Ñкий поÑÑÑбно вилÑÑиÑи"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr ""
"СлÑд вказаÑи каÑалог пÑизнаÑÐµÐ½Ð½Ñ Ñ Ð½Ð°Ð·Ð²Ð¸ пакÑнкÑв, ÑÐºÑ Ð¿Ð¾ÑÑÑбно званÑажиÑи"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "ÐаÑалог не знайдено"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "СлÑд вказаÑи ÑденÑиÑÑкаÑÐ¾Ñ Ð»ÑÑензÑÑ (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "СлÑд вказаÑи ÑденÑиÑÑкаÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÑÑ (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка Ð´Ð»Ñ ÑозвâÑÐ·Ð°Ð½Ð½Ñ ÐºÐ¾Ð½ÑлÑкÑÑ"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ ÑÑ
овиÑа"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ ÑÑ
овиÑа, паÑамеÑÑ Ñ Ð·Ð½Ð°ÑеннÑ"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "СлÑд вказаÑи дÑÑ, напÑиклад «update-system»"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð»ÐµÐ¶Ð½Ñ ÑолÑ"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "СлÑд вказаÑи ÑÑдок вмÑÑÑÑ"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "ÐÑдÑÑимки паÑамеÑÑа «%s» не пеÑедбаÑено"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ зазнала невдаÑÑ"
@@ -644,12 +649,12 @@ msgstr "СÑвоÑено пакÑнок з обÑлÑговÑÐ²Ð°Ð½Ð½Ñ Â«%s»"
msgid "Failed to create '%s': %s"
msgstr "Ðе вдалоÑÑ ÑÑвоÑиÑи «%s»: %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "СпÑоба визнаÑÐµÐ½Ð½Ñ ÑÑÐ°Ð½Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "ÐонÑÑÐ¾Ñ PackageKit"
@@ -708,43 +713,43 @@ msgid "Installing..."
msgstr "ÐÑÑановленнÑ..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
Ñодо джеÑел пÑогÑамного забезпеÑеннÑ."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr ""
"ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑпиÑкÑв ÑайлÑв (Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÑÑÑ Ð´ÑÑ Ð¼Ð¾Ð¶Ðµ бÑÑи доÑиÑÑ ÑÑивалим)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "ÐÑÑкÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° знÑÑÑÑ Ð±Ð»Ð¾ÐºÑÐ²Ð°Ð½Ð½Ñ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑнками."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "ÐаванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð¿Ð°ÐºÑнкÑв."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñи поÑÑк Ñайла"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑÑÑиÑи:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "Ðе вдалоÑÑ Ð²ÑÑановиÑи пакÑнки"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "Ðоманди PackageKit не знайдено"
@@ -754,51 +759,51 @@ msgid "Command not found."
msgstr "ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ знайдено."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "ÐодÑÐ±Ð½Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ñ Ñ:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "ÐиконаÑи подÑÐ±Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "ÐодÑбними командами Ñ:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "ÐÑÐ´Ñ Ð»Ð°Ñка, обеÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, ÑÐºÑ ÑлÑд виконаÑи"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "ÐакÑнком, Ñо мÑÑÑиÑи Ñей Ñайл Ñ:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "ÐÑÑановиÑи пакÑнок «%s», Ñоб забезпеÑиÑи Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ «%s»?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "СеÑед пакÑнкÑв, Ñо мÑÑÑÑÑÑ Ñей Ñайл:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "ÐÑдповÑдними пакÑнками Ñ:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "ÐÑÐ´Ñ Ð»Ð°Ñка, обеÑÑÑÑ Ð¿Ð°ÐºÑнок, Ñкий ÑлÑд вÑÑановиÑи"
@@ -967,7 +972,7 @@ msgstr "Ðе вÑÑановлÑваÑи пакÑнки Ñ ÑÐµÐ¶Ð¸Ð¼Ñ ÑмÑÑ
#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
#. TRANSLATORS: transaction state, installing packages
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
#, c-format
msgid "Installing packages"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв"
@@ -1104,7 +1109,7 @@ msgid "Please enter a number from 1 to %i: "
msgstr "ÐÑÐ´Ñ Ð»Ð°Ñка, введÑÑÑ ÑиÑло вÑд 1 до %i: "
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:185
msgid "More than one package matches:"
msgstr "РклÑÑем поÑÑÐºÑ Ð·Ð±ÑгаÑÑÑÑÑ Ð´ÐµÐºÑлÑка пакÑнкÑв:"
@@ -1114,448 +1119,448 @@ msgid "Please choose the correct package: "
msgstr "ÐÑÐ´Ñ Ð»Ð°Ñка, обеÑÑÑÑ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹ пакÑнок:"
#. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:251
msgid "Unknown state"
msgstr "ÐевÑдомий ÑÑан"
#. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
msgid "Starting"
msgstr "ÐапÑÑк"
#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
msgid "Waiting in queue"
msgstr "ÐÑÑкÑÐ²Ð°Ð½Ð½Ñ Ñ ÑеÑзÑ"
#. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
msgstr "ÐиконаннÑ"
#. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
msgid "Querying"
msgstr "ÐÐ¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸ÑÑ"
#. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ ÑнÑоÑмаÑÑÑ"
#. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
msgid "Removing packages"
msgstr "ÐилÑÑÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв"
#. TRANSLATORS: transaction state, downloading package files
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
msgid "Downloading packages"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв"
#. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
msgstr "ÐÑвÑÐ¶ÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð¿ÑогÑам"
#. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
msgid "Installing updates"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ"
#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
msgid "Cleaning up packages"
msgstr "ÐилÑÑÐµÐ½Ð½Ñ Ð·Ð°Ð¹Ð²Ð¸Ñ
пакÑнкÑв"
#. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
msgid "Obsoleting packages"
msgstr "ÐилÑÑÐµÐ½Ð½Ñ Ð·Ð°ÑÑаÑÑлиÑ
пакÑнкÑв"
#. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
msgid "Resolving dependencies"
msgstr "РозвâÑÐ·Ð°Ð½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾ÑÑей"
#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
msgid "Checking signatures"
msgstr "ÐеÑевÑÑка пÑдпиÑÑв"
#. TRANSLATORS: transaction state, when we return to a previous system state
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
msgid "Rolling back"
msgstr "ÐовеÑÐ½ÐµÐ½Ð½Ñ Ð´Ð¾ попеÑеднÑого"
#. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
msgstr "ÐипÑобÑÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñн"
#. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
msgstr "ÐаÑÑоÑÑÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñн"
#. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
msgid "Requesting data"
msgstr "ÐÐ°Ð¿Ð¸Ñ Ñодо даниÑ
"
#. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
msgid "Finished"
msgstr "ÐавеÑÑено"
#. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
msgstr "СкаÑÑваннÑ"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
msgid "Downloading repository information"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо ÑÑ
овиÑе"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
msgid "Downloading list of packages"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð¿Ð°ÐºÑнкÑв"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑпиÑкÑв ÑайлÑв"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑпиÑкÑв змÑн"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
msgid "Downloading groups"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð³ÑÑп"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
msgid "Downloading update information"
msgstr "ÐванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо оновленнÑ"
#. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
msgstr "ÐеÑепакÑÐ²Ð°Ð½Ð½Ñ ÑайлÑв"
#. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
msgid "Loading cache"
msgstr "ÐаванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÐºÐµÑÑ"
#. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
msgid "Scanning applications"
msgstr "ÐоÑÑк пÑогÑам"
#. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
msgid "Generating package lists"
msgstr "СÑвоÑÐµÐ½Ð½Ñ ÑпиÑкÑв пакÑнкÑв"
#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
msgid "Waiting for package manager lock"
msgstr "ÐÑÑкÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° знÑÑÑÑ Ð±Ð»Ð¾ÐºÑÐ²Ð°Ð½Ð½Ñ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑнками"
#. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
msgstr "ÐÑÑкÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° завеÑÑÐµÐ½Ð½Ñ ÑозпÑзнаваннÑ"
#. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
msgid "Updating running applications"
msgstr "ÐÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð·Ð°Ð¿ÑÑенний пÑогÑам"
#. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
msgid "Checking applications in use"
msgstr "ÐиÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿ÑогÑам, Ñо викоÑиÑÑовÑÑÑÑÑÑ"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
msgstr "ÐиÑÐ²Ð»ÐµÐ½Ð½Ñ Ð±ÑблÑоÑек, Ñо викоÑиÑÑовÑÑÑÑÑÑ"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
msgid "Copying files"
msgstr "ÐопÑÑÐ²Ð°Ð½Ð½Ñ ÑайлÑв"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:413
msgid "Trivial"
msgstr "ÐезнаÑне"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
msgid "Normal"
msgstr "ÐвиÑайне"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
msgid "Important"
msgstr "Ðажливе"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
msgid "Security"
msgstr "Ðезпека"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
msgstr "ÐипÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð°Ð´"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
msgid "Enhancement"
msgstr "ÐокÑаÑеннÑ"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
msgid "Blocked"
msgstr "Ðаблоковане"
#. TRANSLATORS: The state of a package
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
msgid "Installed"
msgstr "ÐÑÑановлене"
#. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:447
msgid "Available"
msgstr "ÐоÑÑÑпний"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:465
msgid "Downloading"
msgstr "ÐванÑаженнÑ"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
msgid "Updating"
msgstr "ÐновленнÑ"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
msgid "Installing"
msgstr "ÐÑÑановленнÑ"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
msgid "Removing"
msgstr "ÐилÑÑеннÑ"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
msgid "Cleaning up"
msgstr "ÐÑиÑеннÑ"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
msgid "Obsoleting"
msgstr "РобиÑÑ Ð·Ð°ÑÑаÑÑлим"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
msgid "Reinstalling"
msgstr "ÐеÑевÑÑановленнÑ"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:507
msgid "Downloaded"
msgstr "ÐванÑажено"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
msgid "Removed"
msgstr "ÐилÑÑено"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
msgstr "ÐÑиÑено"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
msgstr "СÑав заÑÑаÑÑлим"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
msgstr "ÐеÑевÑÑановлено"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
msgstr "ÐевÑдомий Ñип"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
msgid "Getting dependencies"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾ÑÑей"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
msgid "Getting update details"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´ÑобиÑÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
msgid "Getting details"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´ÑобиÑÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
msgid "Getting requires"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
пÑо вимоги"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
msgid "Getting updates"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
msgid "Searching by details"
msgstr "ÐоÑÑк за подÑобиÑÑми"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
msgid "Searching by file"
msgstr "ÐоÑÑк за Ñайлом"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
msgid "Searching groups"
msgstr "ÐоÑÑк гÑÑп"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
msgid "Searching by name"
msgstr "ÐоÑÑк за назвоÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
msgid "Installing files"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑайлÑв"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
msgstr "ÐÑвÑÐ¶ÐµÐ½Ð½Ñ ÐºÐµÑÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
msgid "Updating packages"
msgstr "ÐÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
msgstr "ÐÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑÑеми"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
msgid "Canceling"
msgstr "СкаÑÑваннÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
msgid "Getting repositories"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑÐºÑ ÑÑ
овиÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
msgid "Enabling repository"
msgstr "УвÑÐ¼ÐºÐ½ÐµÐ½Ð½Ñ ÑÑ
овиÑа"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
msgid "Resolving"
msgstr "РозвâÑзаннÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
msgid "Getting file list"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑÐºÑ ÑайлÑв"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
msgid "Getting provides"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
пÑо вмÑÑÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
msgid "Installing signature"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑдпиÑÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
msgid "Getting packages"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑÐºÑ Ð¿Ð°ÐºÑнкÑв"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
msgstr "Ðгода з EULA"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
msgid "Getting upgrades"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ñ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
msgid "Getting categories"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ ÐºÐ°ÑегоÑÑй"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
msgid "Getting transactions"
msgstr "ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑÐºÑ Ð´Ñй"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
msgid "Simulating install"
msgstr "ÐмÑÑаÑÑÑ Ð²ÑÑановленнÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
msgid "Simulating remove"
msgstr "ÐмÑÑаÑÑÑ Ð²Ð¸Ð»ÑÑеннÑ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
msgstr "ÐмÑÑаÑÑÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"
@@ -1994,25 +1999,25 @@ msgid "Show debugging information for all files"
msgstr "ÐоказÑваÑи дÑагноÑÑиÑÐ½Ñ Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ð²ÑÑÑ
ÑайлÑв"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "ÐÑагноÑÑика вказаниÑ
модÑлÑв"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "ÐÑагноÑÑика вказаниÑ
ÑÑнкÑÑй"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "ÐапиÑаÑи Ð´Ð°Ð½Ñ Ð´ÑагноÑÑики до Ñайла"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "ÐаÑамеÑÑи дÑагноÑÑики"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "ÐоказÑваÑи паÑамеÑÑи дÑагноÑÑики"
@@ -2158,6 +2163,3 @@ msgstr "ÐоказÑваÑи паÑамеÑÑи дÑагноÑÑики"
#~ msgid "Media ID"
#~ msgstr "ÐденÑиÑÑкаÑÐ¾Ñ Ð½Ð¾ÑÑÑ"
-
-#~ msgid "The package could not be found"
-#~ msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи пакÑнок"
commit abd582cc9daed8bd573477a4053827183b4ebf78
Author: logan <logan at fedoraproject.org>
Date: Fri Apr 2 16:18:59 2010 +0000
l10n: Updates to Spanish (Castilian) (es) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/es.po b/po/es.po
index 6b63057..7e47401 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-09 09:20+0000\n"
-"PO-Revision-Date: 2010-03-09 09:39-0300\n"
+"POT-Creation-Date: 2010-04-02 14:15+0000\n"
+"PO-Revision-Date: 2010-04-02 13:17-0300\n"
"Last-Translator: Héctor Daniel Cabrera <logan at fedoraproject.org>\n"
"Language-Team: Fedora Spanish <trans-es at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -23,119 +23,119 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175
-#: ../client/pk-console.c:597
+#: ../client/pk-console.c:176
+#: ../client/pk-console.c:598
msgid "Transaction"
msgstr "Transacción"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "Hora del sistema"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "Existosa"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "Verdadero"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "Falso"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181
+#: ../client/pk-console.c:182
#: ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "Rol"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "Duración"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(segundos)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190
+#: ../client/pk-console.c:191
#: ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "LÃnea de comandos"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "ID del usuario"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "Nombre de usuario"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "Nombre real"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "Paquete afectados:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "Paquetes afectados: Ninguno"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "Distribución"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Tipo"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252
-#: ../client/pk-console.c:291
+#: ../client/pk-console.c:253
+#: ../client/pk-console.c:292
msgid "Summary"
msgstr "Resúmen"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "CategorÃa"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "ID"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "Padre"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Nombre"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Icono"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "Detalles acerca de la actualización:"
@@ -144,8 +144,8 @@ msgstr "Detalles acerca de la actualización:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346
-#: ../client/pk-console.c:616
+#: ../client/pk-console.c:347
+#: ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -155,196 +155,196 @@ msgstr[0] "Paquete"
msgstr[1] "Paquetes"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "Actualizaciones"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "Sustituye"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357
+#: ../client/pk-console.c:358
#: ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "Fabricante"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Reiniciar"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "Texto de actualización"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "Cambios"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "Estado"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "Emitido"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389
-#: ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Actualizado"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "Habilitado"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "Deshabilitado"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Se necesita reiniciar el sistema debido a:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "Se necesita reiniciar la sesión:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Reinicio del sistema (seguridad) solicitado por:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "Reinicio de la sesión (seguridad) solicitado por:"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Se necesita reiniciar una aplicación debido a:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "Descripción del paquete"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "Mensaje:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "No hay archivos"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Archivos del paquete"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "Porcentaje"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "Estado"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "Resultados:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Error fatal"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "La transacción no pudo realizarse"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "No hay actualizaciones disponibles en este momento."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "En este momento no existen actualizaciones disponibles."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "Reinicie el equipo para completar la actualización."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "Cierre la sesión y vuelva a entrar para completar la actualización."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid "Please restart the computer to complete the update as important security updates have been installed."
msgstr "Por favor, reinicie el equipo para completar la actualización, ya que se han instalado actualizaciones de seguridad importantes."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid "Please logout and login to complete the update as important security updates have been installed."
msgstr "Por favor, cierre la sesión y vuelva a registrarse para completar la actualización, ya que se han instalado actualizaciones de seguridad importantes."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid "Extected package name, actually got file. Try using 'pkcon install-local %s' instead."
msgstr "Nombre de paquete esperado, actualmente tiene archivo. Trate de usar 'pkcon install-local %s' en su lugar."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Esta herramienta no pudo encontrar ningún paquete disponible: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Esta herramienta no pudo encontrar el paquete instalado: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915
-#: ../client/pk-console.c:943
+#: ../client/pk-console.c:916
+#: ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Esta herramienta no pudo encontrar el paquete: %s"
@@ -353,185 +353,190 @@ msgstr "Esta herramienta no pudo encontrar el paquete: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971
-#: ../client/pk-console.c:999
-#: ../client/pk-console.c:1027
-#: ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972
+#: ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028
+#: ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Esta herramienta no pudo encontrar todos los paquetes: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "El demonio se colgó en medio de una transacción."
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "Interfaz de consola de PackageKit"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "Subcomandos:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr "Falló al obtener la hora de la última vez que se completó esta acción"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263
-#: ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267
+#: ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Mostrar la versión del programa y salir"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "Establecer el filtro, ej. instalado"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "Salir sin esperar que las acciones se completen"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instalar los paquetes sin confirmación"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr "Corra el comando usando ancho de bando libre y también usando menos potencia"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid "Print to screen a machine readable output, rather than using animated widgets"
msgstr "Imprimir en la pantalla una salida legible por una máquina, en vez de usar controles animados"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Falló al contactar con PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "No se pudo definir el proxy"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "El filtro especificado fue inválido"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "Se necesita un tipo de búsqueda, por ejemplo, nombre"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384
-#: ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408
-#: ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403
+#: ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427
+#: ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "Se necesita un término de búsqueda"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "Tipo de búsqueda inválido"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "Se necesita un nombre de paquete a instalar"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "Se requiere un nombre de archivo a instalar"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "Se necesita un tipo, key_id y package_id"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "Necesita un nombre de paquete para eliminar"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "Se necesita un directorio de destino y los nombres de los paquetes a descargar"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "Directorio no encontrado"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "Se necesita un identificador de licencia (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "Se necesita un identificador de transacción (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "Se necesita un nombre de paquete para resolver"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536
-#: ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555
+#: ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "Se necesita un nombre de repositorio"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "Debe especificar un nombre de repositorio, parámetro y valor"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "Debe especificar una acción, por ejemplo, «update-system»"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "Se necesita un rol correcto"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592
-#: ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616
-#: ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645
+#: ../client/pk-console.c:1611
+#: ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635
+#: ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664
#: ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Se necesita un nombre de paquete"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "Se necesita la cadena de lo que proporciona el paquete"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "La opción «%s» no está soportada"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "Falló el comando"
@@ -640,12 +645,12 @@ msgstr "Paquete de servicio «%s» creado"
msgid "Failed to create '%s': %s"
msgstr "Falló al crear «%s»: %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "Falló al obtener el estado del demonio"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "Monitor de PackageKit"
@@ -704,42 +709,42 @@ msgid "Installing..."
msgstr "Instalando..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "Descargando detalles acerca de las fuentes de software"
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr "Descargando listas de archivo (esto podrÃa tardar un tiempo en completarse)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "Esperando bloqueo del administrador de paquetes."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "Cargando listas de paquetes"
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Falló al buscar el archivo"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Falló al iniciar:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "No se han podido instalar los paquetes"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "No se encontró el comando PackageKit"
@@ -749,51 +754,51 @@ msgid "Command not found."
msgstr "Comando no encontrado."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "Un comando similar es:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "Ejecutar un comando similar:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "Los comandos similares son:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "Elija un comando para ejecutar"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "El paquete que proporciona este archivo es:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "¿Instalar el paquete «%s» para proporcionar el comando «%s»?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "Los paquetes que proporcionan este archivo son:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "Los posibles paquetes son:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "Elija un paquete para instalar"
@@ -961,7 +966,7 @@ msgstr "No se instalan paquetes en modo de simulación"
#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
#. TRANSLATORS: transaction state, installing packages
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
#, c-format
msgid "Installing packages"
msgstr "Instalando paquetes"
@@ -1098,7 +1103,7 @@ msgid "Please enter a number from 1 to %i: "
msgstr "Introduzca un número de 1 a %i: "
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:185
msgid "More than one package matches:"
msgstr "Coincide más de un paquete:"
@@ -1108,448 +1113,448 @@ msgid "Please choose the correct package: "
msgstr "Elija el paquete correcto: "
#. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:251
msgid "Unknown state"
msgstr "Estado desconocido"
#. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
msgid "Starting"
msgstr "Comenzando"
#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
msgid "Waiting in queue"
msgstr "Esperando en cola"
#. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
msgstr "Corriendo"
#. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
msgid "Querying"
msgstr "Consultando"
#. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
msgstr "Obteniendo.información"
#. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
msgid "Removing packages"
msgstr "Eliminando paquetes"
#. TRANSLATORS: transaction state, downloading package files
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
msgid "Downloading packages"
msgstr "Descargando paquetes"
#. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
msgstr "Refrescando listado de software"
#. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
msgid "Installing updates"
msgstr "Instalando actualizaciones"
#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
msgid "Cleaning up packages"
msgstr "Limpiando paquetes"
#. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
msgid "Obsoleting packages"
msgstr "Paquetes obsoletos"
#. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
msgid "Resolving dependencies"
msgstr "Resolviendo dependencias"
#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
msgid "Checking signatures"
msgstr "Comprobando firmas"
#. TRANSLATORS: transaction state, when we return to a previous system state
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
msgid "Rolling back"
msgstr "Retrocediendo"
#. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
msgstr "Comprobando cambios"
#. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
msgstr "Realizando cambios"
#. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
msgid "Requesting data"
msgstr "Solicitando datos"
#. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
msgid "Finished"
msgstr "Finalizado"
#. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
msgstr "Cancelado"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
msgid "Downloading repository information"
msgstr "Descargando información del repositorio"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
msgid "Downloading list of packages"
msgstr "Descargando listas de paquetes"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
msgstr "Descargando listados de archivos"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
msgstr "Descargando listas de cambios"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
msgid "Downloading groups"
msgstr "Descargando grupos"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
msgid "Downloading update information"
msgstr "Descargando información de la actualización"
#. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
msgstr "Empaquetando archivos"
#. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
msgid "Loading cache"
msgstr "Cargando caché"
#. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
msgid "Scanning applications"
msgstr "Escaneando aplicaciones"
#. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
msgid "Generating package lists"
msgstr "Generando la lista de paquetes"
#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
msgid "Waiting for package manager lock"
msgstr "Esperando bloqueo del administrador de paquetes"
#. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
msgstr "Esperando por la autentificación"
#. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
msgid "Updating running applications"
msgstr "Actualizando aplicaciones ejecutadas"
#. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
msgid "Checking applications in use"
msgstr "Comprobando aplicaciones en uso"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
msgstr "Comprobando LibrerÃas en uso"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
msgid "Copying files"
msgstr "Copiando archivos"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:413
msgid "Trivial"
msgstr "Trivial"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
msgid "Normal"
msgstr "Normal"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
msgid "Important"
msgstr "Importante"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
msgid "Security"
msgstr "Seguridad"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
msgstr "Corrijiendo error"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
msgid "Enhancement"
msgstr "Mejora"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
msgid "Blocked"
msgstr "Bloqueado"
#. TRANSLATORS: The state of a package
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
msgid "Installed"
msgstr "Instalado"
#. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:447
msgid "Available"
msgstr "Disponible"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:465
msgid "Downloading"
msgstr "Descargando"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
msgid "Updating"
msgstr "Actualizando"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
msgid "Installing"
msgstr "Instalando"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
msgid "Removing"
msgstr "Eliminando"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
msgid "Cleaning up"
msgstr "Limpiando"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
msgid "Obsoleting"
msgstr "Obsoleto"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
msgid "Reinstalling"
msgstr "Reinstalando"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:507
msgid "Downloaded"
msgstr "Descargado"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
msgid "Removed"
msgstr "Eliminados"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
msgstr "Limpiados"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
msgstr "Obsoleto"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
msgstr "Reinstalado"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
msgstr "Tipo de rol desconocido"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
msgid "Getting dependencies"
msgstr "Obteniendo dependencias"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
msgid "Getting update details"
msgstr "Obteniendo detalles de la actualización"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
msgid "Getting details"
msgstr "Obteniendo detalles"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
msgid "Getting requires"
msgstr "Obteniendo lo que requiere"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
msgid "Getting updates"
msgstr "Obteniendo actualizaciones"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
msgid "Searching by details"
msgstr "Buscando por detalles"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
msgid "Searching by file"
msgstr "Buscando por archivos"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
msgid "Searching groups"
msgstr "Buscando grupos"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
msgid "Searching by name"
msgstr "Buscando por nombre"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
msgid "Installing files"
msgstr "Instalando archivos"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
msgstr "Refrescando caché"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
msgid "Updating packages"
msgstr "Actualizando paquetes"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
msgstr "Actualizando sistema"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
msgid "Canceling"
msgstr "Cancelando"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
msgid "Getting repositories"
msgstr "Obteniendo repositorios"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
msgid "Enabling repository"
msgstr "Habilitando repositorio"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
msgstr "Poniendo datos"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
msgid "Resolving"
msgstr "Resolviendo"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
msgid "Getting file list"
msgstr "Obteniendo lista de archivos"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
msgid "Getting provides"
msgstr "Obteniendo lo que provee"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
msgid "Installing signature"
msgstr "Instalando firma"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
msgid "Getting packages"
msgstr "Obteniendo paquetes"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
msgstr "Aceptando EULA"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
msgid "Getting upgrades"
msgstr "Obteniendo actualizaciones"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
msgid "Getting categories"
msgstr "Obteniendo categorÃas"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
msgid "Getting transactions"
msgstr "Obteniendo transacciones"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
msgid "Simulating install"
msgstr "Simulando la instalación"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
msgid "Simulating remove"
msgstr "Simulando eliminación"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
msgstr "Sumulando la actualización"
@@ -1966,25 +1971,25 @@ msgid "Show debugging information for all files"
msgstr "Mostrar información de depuración para todos los archivos"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "Depurar estos módulos especÃficos"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "Depurar estas funciones especÃficas"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "Registrar en un archivo los datos de la depuración "
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "Opciones de depuración"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "Mostrar información extra de depuración"
@@ -1992,228 +1997,316 @@ msgstr "Mostrar información extra de depuración"
#~ msgstr ""
#~ "Un software considerado maligno puede provocar diferentes clases de daño, "
#~ "por ejemplo, podrÃa dañar su computadora. "
+
#~ msgid "Transaction failed with no error"
#~ msgstr "La transacción fallida sin error"
+
#~ msgid "Failed to get transaction list"
#~ msgstr "Falló al obtener la lista de transacciones"
+
#~ msgid "Please restart the application as it is being used."
#~ msgstr "Reinicie la aplicación que está usando."
+
#~ msgid "The package %s is already installed"
#~ msgstr "El paquete %s ya está instalado"
+
#~ msgid "The package %s could not be installed: %s"
#~ msgstr "No se pudo instalar el paquete %s: %s"
+
#~ msgid "The package install was canceled!"
#~ msgstr "¡Se canceló la instalación del paquete!"
+
#~ msgid "This tool could not install the packages: %s"
#~ msgstr "Esta herramienta no pudo instalar los paquetes: %s"
+
#~ msgid "This tool could not install the files: %s"
#~ msgstr "Esta herramienta no pudo instalar los archivos: %s"
+
#~ msgid "This tool could not remove %s: %s"
#~ msgstr "Esta herramienta no pudo eliminar %s: %s"
+
#~ msgid "This tool could not remove the packages: %s"
#~ msgstr "Esta herramienta no pudo eliminar los paquetes: %s"
+
#~ msgid "Proceed with additional packages?"
#~ msgstr "¿Proceder con los paquetes adicionales?"
+
#~ msgid "The package removal was canceled!"
#~ msgstr "Se canceló la eliminación de paquetes"
+
#~ msgid "This tool could not download the package %s as it could not be found"
#~ msgstr ""
#~ "Esta herramienta no pudo descargar el paquete %s debido a que no se "
#~ "encontró"
+
#~ msgid "This tool could not download the packages: %s"
#~ msgstr "Esta herramienta no pudo descargar los paquetes: %s"
+
#~ msgid "This tool could not update %s: %s"
#~ msgstr "Esta herramienta no pudo actualizar %s: %s"
+
#~ msgid "The package update was canceled!"
#~ msgstr "¡Se canceló la actualización del paquete!"
+
#~ msgid "This tool could not get the requirements for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener los requerimientos de %s: %s"
+
#~ msgid "This tool could not get the dependencies for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener las dependencias de %s: %s"
+
#~ msgid "This tool could not get package details for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener los detalles del paquete %s: %s"
+
#~ msgid "This tool could not find the files for %s: %s"
#~ msgstr "Esta herramienta no pudo encontrar los archivos de %s: %s"
+
#~ msgid "This tool could not get the file list for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener la lista de archivos de %s: %s"
+
#~ msgid "File already exists: %s"
#~ msgstr "El archivo ya existe: %s"
+
#~ msgid "This tool could not get package list: %s"
#~ msgstr "Esta herramienta no pudo obtener la lista de paquetes: %s"
+
#~ msgid "Failed to save to disk"
#~ msgstr "Falló al guardar en el disco"
+
#~ msgid "File does not exist: %s"
#~ msgstr "El archivo no existe: %s"
+
#~ msgid "Packages to add"
#~ msgstr "Paquetes para añadir"
+
#~ msgid "Packages to remove"
#~ msgstr "Paquetes para eliminar"
+
#~ msgid "No new packages need to be installed"
#~ msgstr "No hay paquetes nuevos para instalar"
+
#~ msgid "not found."
#~ msgstr "no encontrado."
+
#~ msgid "No packages can be found to install"
#~ msgstr "No se encontró ningún paquete para instalar"
+
#~ msgid "This tool could not find the update details for %s: %s"
#~ msgstr ""
#~ "Esta herramienta no pudo encontrar los detalles de actualización de %s: %s"
+
#~ msgid "This tool could not get the update details for %s: %s"
#~ msgstr ""
#~ "Esta herramienta no pudo obtener los detalles de actualización de %s: %s"
+
#~ msgid "Error:"
#~ msgstr "Error:"
+
#~ msgid "Repository signature required"
#~ msgstr "Se requiere la firma del repositorio"
+
#~ msgid "End user license agreement required"
#~ msgstr "Se requiere un acuerdo de licencia de usuario final"
+
#~ msgid "Do you agree to this license?"
#~ msgstr "¿Está de acuerdo con esta licencia?"
+
#~ msgid "The license was refused."
#~ msgstr "Se rechazó la licencia."
+
#~ msgid "This tool could not connect to system DBUS."
#~ msgstr "Esta herramienta no se pudo conectar al DBUS del sistema."
+
#~ msgid "A package name or filename to install is required"
#~ msgstr "Se requiere un nombre de paquete o nombre de archivo para instalar"
+
#~ msgid "A list file name to create is required"
#~ msgstr "Se necesita un nombre de archivo de la lista"
+
#~ msgid "A list file to open is required"
#~ msgstr "Se necesita un archivo de lista para abrir"
+
#~ msgid "Incorrect privileges for this operation"
#~ msgstr "Privilegios incorrectos para esta operación"
+
#~ msgid "Cannot show the list of transactions"
#~ msgstr "No es posible mostrar la lista de transacciones"
-#~ msgid "The package could not be found"
-#~ msgstr "No se pudo encontrar el paquete"
+
#~ msgid "EULA ID"
#~ msgstr "ID del acuerdo de licencia de usuario final (EULA) "
+
#~ msgid "Media ID"
#~ msgstr "ID de medio"
+
#~ msgid "Main cache file to use (if not specififed, default is used)"
#~ msgstr ""
#~ "Archivo caché principal a usar (si no se especifica, se usará el "
#~ "predeterminado)"
+
#~ msgid "Source cache file to add to the main database"
#~ msgstr "Archivo caché fuente para agregar a la base de datos principal"
+
#~ msgid "Icon directory"
#~ msgstr "Directorio de Iconos"
+
#~ msgid "Name of the remote repo"
#~ msgstr "Nombre del repo remoto"
+
#~ msgid "PackageKit Application Database Installer"
#~ msgstr "Instalador de la Base de Datos de Aplicaciones de PackageKit"
+
#~ msgid "Main database file to use (if not specififed, default is used)"
#~ msgstr ""
#~ "Base de datos principal a usar (si no se especifica se usará el "
#~ "predeterminado)"
+
#~ msgid "You need to specify a search type, e.g. name"
#~ msgstr "Debe especificar el tipo de búsqueda, por ejemplo, nombre"
+
#~ msgid "You need to specify a search term"
#~ msgstr "Debe especificar un término de búsqueda"
+
#~ msgid "You need to specify a package to remove"
#~ msgstr "Debe especificar un paquete a eliminar"
+
#~ msgid "You need to specify a package name to resolve"
#~ msgstr "Debe especificar un nombre de paquete a resolver"
+
#~ msgid "You need to specify a repository name"
#~ msgstr "Debe especificar un nombre de repositorio"
+
#~ msgid "You need to specify a correct role"
#~ msgstr "Debe especificar un rol correcto"
+
#~ msgid "You need to specify a package to find the details for"
#~ msgstr "Debe especificar un paquete para el que buscar la descripción"
+
#~ msgid "You need to specify a package to find the files for"
#~ msgstr "Debe especificar un paquete para el que buscar los archivos"
+
#~ msgid "You need to specify a list file to open"
#~ msgstr "Debe especificar un archivo de lista a abrir"
+
#~ msgid "This tool could not remove the packages: '%s'"
#~ msgstr "Esta herramienta no pudo eliminar los paquetes: '%s'"
+
#~ msgid "Install local file"
#~ msgstr "Instalar archivo local"
+
#~ msgid "Okay to import key?"
#~ msgstr "¿De acuerto con importer la clave?"
+
#~ msgid "Did not import key"
#~ msgstr "No se importó la clave"
+
#~ msgid "Do you agree?"
#~ msgstr "¿Está de acuerdo?"
+
#~ msgid "Could not find package to remove"
#~ msgstr "No se pudo encontrar el paquete a eliminar"
+
#~ msgid "Could not find package to update"
#~ msgstr "No se pudo encontrar el paquete a actualizar"
+
#~ msgid "Could not find what packages require"
#~ msgstr "No se pudo encontrar cuales paquetes requiere este paquete"
+
#~ msgid "Could not find details for"
#~ msgstr "No se pudieron obtener los detalles de "
#, fuzzy
#~ msgid "Could not set database readonly"
#~ msgstr "No se pudo abrir la base de datos: %s"
+
#~ msgid "Could not open database: %s"
#~ msgstr "No se pudo abrir la base de datos: %s"
+
#~ msgid "You probably need to run this program as the root user"
#~ msgstr "Probablemente necesita ejecutar este programa como el usuario root"
+
#~ msgid "<span color='#%06x' underline='single' size='larger'>Run %s</span>"
#~ msgstr ""
#~ "<span color='#%06x' underline='single' size='larger'>Ejecutar %s</span>"
+
#~ msgid "<big>%s</big>"
#~ msgstr "<big>%s</big>"
+
#~ msgid ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Run version %s now</span>"
#~ msgstr ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Ejecutar versión %s ahora</span>"
+
#~ msgid ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Run now</span>"
#~ msgstr ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Ejecutar ahora</span>"
+
#~ msgid ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Upgrade to version %s</span>"
#~ msgstr ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Actualizar a la versión %s</span>"
+
#~ msgid ""
#~ "<span color='#%06x' underline='single' size='larger'>Install %s Now</span>"
#~ msgstr ""
#~ "<span color='#%06x' underline='single' size='larger'>Instalar %s Ahora</"
#~ "span>"
+
#~ msgid ""
#~ "\n"
#~ "<small>Version: %s</small>"
#~ msgstr ""
#~ "\n"
#~ "<small>Versión: %s</small>"
+
#~ msgid "failed to download: invalid package_id and/or directory"
#~ msgstr "falló la descarga: id de paquete inválido y/o directorio"
+
#~ msgid "Could not find a valid metadata file"
#~ msgstr "No se pudo encontrar un archivo de metadatos válido"
+
#~ msgid "Okay to download the additional packages"
#~ msgstr "Listo para descargar los paquetes adicionales"
+
#~ msgid "You need to specify the pack name and packages to be packed\n"
#~ msgstr "Debe especificar el nombre de grupo y los paquetes a agrupar\n"
+
#~ msgid ""
#~ "Invalid name for the service pack, Specify a name with .servicepack "
#~ "extension\n"
#~ msgstr ""
#~ "Nombre inválido para el paquete de servicio. Especifique un nombre con la "
#~ "extensión .servicepack\n"
+
#~ msgid "Authentication is required to install a local file"
#~ msgstr "Se requiere autenticación para instalar un archivo local"
+
#~ msgid "Authentication is required to install a security signature"
#~ msgstr "Se requiere autenticación para instalar una firma de seguridad"
+
#~ msgid "Authentication is required to update all packages"
#~ msgstr "Se requiere autenticación para actualizar todos los paquetes"
+
#~ msgid "Update all packages"
#~ msgstr "Actualizar todos los paquetes"
+
#~ msgid ""
#~ "Could not find a package with that name to install, or package already "
#~ "installed"
#~ msgstr ""
#~ "No se pudo encontrar un paquete con ese nombre para instalar, o el "
#~ "paquete ya está instalado"
+
#~ msgid "Could not find a package with that name to update"
#~ msgstr "No se pudo encontrar un paquete con ese nombre para actualizar"
+
#~ msgid "Could not find a description for this package"
#~ msgstr "No se pudo encontrar una descripcion para este paquete"
+
#~ msgid "You need to specify a package to find the description for"
#~ msgstr "Debe especificar un paquete para el que buscar la descripción"
-
commit df4039e0898a72c199e449a07f9da5beb3e95864
Author: raven <raven at fedoraproject.org>
Date: Fri Apr 2 10:55:04 2010 +0000
l10n: Updates to Polish (pl) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/pl.po b/po/pl.po
index 740e7d7..d9d426f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-10 09:00+0000\n"
-"PO-Revision-Date: 2010-03-10 11:15+0100\n"
+"POT-Creation-Date: 2010-04-02 10:29+0000\n"
+"PO-Revision-Date: 2010-04-02 12:54+0200\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <trans-pl at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -17,115 +17,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "Transakcja"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "Czas systemowy"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "Powodzenie"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "Prawda"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "FaÅsz"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "Rola"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "Czas trwania"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(sekundy)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Wiersz poleceÅ"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "Identyfikator użytkownika"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "Nazwa użytkownika"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "ImiÄ i nazwisko"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "Dotyczy pakietów:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "Dotyczy pakietów: żadnych"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "Dystrybucja"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Typ"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "Podsumowanie"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "Kategoria"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "Identyfikator"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "NadrzÄdna"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Nazwa"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Ikona"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "SzczegóÅy aktualizacji:"
@@ -134,7 +134,7 @@ msgstr "SzczegóÅy aktualizacji:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -145,165 +145,165 @@ msgstr[1] "Pakiety"
msgstr[2] "Pakietów"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "Aktualizuje"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "ZastÄpuje"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "Producent"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Uruchom ponownie"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "Tekst aktualizacji"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "Zmiany"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "Stan"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "Wydano"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Zaktualizowano"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "WÅÄ
czone"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "WyÅÄ
czone"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Ponowne uruchomienie systemu jest wymagane przez:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "Wymagane jest ponowne uruchomienie sesji:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Ponowne uruchomienie systemu jest wymagane przez:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "Wymagane jest ponowne uruchomienie sesji (z powodu bezpieczeÅstwa):"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Ponowne uruchomienie programu jest wymagane przez:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "Opis pakietu"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "Komunikat:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Brak plików"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Pliki pakietu"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "Procentowo"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "Stan"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "Wyniki:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Krytyczny bÅÄ
d"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "Transakcja nie powiodÅa siÄ"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "Brak dostÄpnych aktualizacji w tej chwili."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "Brak dostÄpnych aktualizacji w tej chwili."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "ProszÄ uruchomiÄ ponownie komputer, aby zakoÅczyÄ aktualizacjÄ."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "ProszÄ wylogowaÄ siÄ i zalogowaÄ, aby zakoÅczyÄ aktualizacjÄ."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -312,7 +312,7 @@ msgstr ""
"zainstalowano aktualizacje bezpieczeÅstwa."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
@@ -321,7 +321,7 @@ msgstr ""
"zainstalowano aktualizacje bezpieczeÅstwa."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
"Extected package name, actually got file. Try using 'pkcon install-local %s' "
@@ -331,19 +331,19 @@ msgstr ""
"wykonaÄ polecenie \"pkcon install-local %s\"."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Te narzÄdzie nie może odnaleÅºÄ dostÄpnych pakietów: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Te narzÄdzie nie może odnaleÅºÄ zainstalowanego pakietu: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Te narzÄdzie nie może odnaleÅºÄ pakietu: %s"
@@ -352,64 +352,64 @@ msgstr "Te narzÄdzie nie może odnaleÅºÄ pakietu: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Te narzÄdzie nie może odnaleÅºÄ wszystkich pakietów: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "Demon zawiesiÅ siÄ w poÅowie transakcji!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "Interfejs konsoli PackageKit"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "Podpolecenia:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr ""
"Uzyskanie czasu od ostatniego zakoÅczenia tego dziaÅania nie powiodÅo siÄ"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "WyÅwietla wersjÄ programu i wyÅÄ
cza"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "Ustawia filtr, np. zainstalowane"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "WyÅÄ
cza bez oczekiwania na zakoÅczenie dziaÅaÅ"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instaluje pakiety bez proÅby o potwierdzenie"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Wykonuje polecenie używajÄ
c bezczynnego poÅÄ
czenia sieciowego, a także "
"zużywajÄ
c mniej energii"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -417,117 +417,122 @@ msgstr ""
"widgetów"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Skontaktowanie siÄ z usÅugÄ
PackageKit nie powiodÅo siÄ"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "Nie można ustawiÄ poÅrednika"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "Podany filtr jest nieprawidÅowy"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "Wymagany jest typ wyszukiwania, np. nazwa"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "Wymagany jest wyszukiwany termin"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "NieprawidÅowy typ wyszukiwania"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "Wymagana jest nazwa pakietu do zainstalowania"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "Wymagana jest nazwa pliku do zainstalowania"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "Wymagany jest typ, key_id i package_id"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "Wymagana jest nazwa pakietu do usuniÄcia"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "Wymagany jest katalog docelowy i nazwy pakietów do pobrania"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "Nie odnaleziono katalogu"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "Wymagany jest identyfikator licencji (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "Wymagany jest identyfikator transakcji (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "Wymagana jest nazwa pakietu do rozwiÄ
zania"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "Wymagana jest nazwa repozytorium"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "Wymagana jest nazwa, parametr i wartoÅÄ repozytorium"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "Wymagane jest dziaÅanie, np. \"update-system\""
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "Wymagana jest bieżÄ
ca rola"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Wymagana jest nazwa pakietu"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "Wymagany jest ÅaÅcuch dostarczania pakietu"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "Opcja \"%s\" nie jest obsÅugiwana"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "Polecenie nie powiodÅo siÄ"
@@ -623,7 +628,7 @@ msgstr "Wyszukiwanie nazwy pakietu."
#: ../client/pk-generate-pack.c:434
#, c-format
msgid "Failed to find package '%s': %s"
-msgstr "Nie można odnaleÅºÄ pakietu \"%s\": %s"
+msgstr "Odnalezienie pakietu \"%s\" nie powiodÅo siÄ: %s"
#. TRANSLATORS: This is telling the user we are in the process of making the pack
#: ../client/pk-generate-pack.c:442
@@ -642,12 +647,12 @@ msgstr "Utworzono pakiet serwisowy \"%s\""
msgid "Failed to create '%s': %s"
msgstr "Utworzenie \"%s\" nie powiodÅo siÄ: %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "Uzyskanie stanu demona nie powiodÅo siÄ"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "Monitor PackageKit"
@@ -706,42 +711,42 @@ msgid "Installing..."
msgstr "Instalowanie..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "Pobieranie szczegóÅów o źródÅach oprogramowania."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr "Pobieranie list plików (może to zajÄ
Ä trochÄ czasu)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "Oczekiwanie na blokadÄ menedżera pakietów."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "Wczytywanie listy pakietów."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Odnalezienie pliku nie powiodÅo siÄ"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Uruchomienie nie powiodÅo siÄ:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "Zainstalowanie pakietów nie powiodÅo siÄ"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "Nie odnaleziono polecenia PackageKit"
@@ -751,51 +756,51 @@ msgid "Command not found."
msgstr "Nie odnaleziono polecenia."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "Podobne polecenie:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "Wykonaj podobne polecenie:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "Podobne polecenia:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "ProszÄ wybraÄ polecenie do wykonania"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "Pakiet dostarczajÄ
cy ten plik:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "ZainstalowaÄ pakiet \"%s\", aby dostarczyÄ polecenie \"%s\"?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "Pakiety dostarczajÄ
ce ten plik:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "Odpowiednie pakiety:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "ProszÄ wybraÄ pakiet do zainstalowania"
@@ -965,7 +970,7 @@ msgstr "Pakiety nie zostanÄ
zainstalowane w trybie symulacji"
#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
#. TRANSLATORS: transaction state, installing packages
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
#, c-format
msgid "Installing packages"
msgstr "Instalowanie pakietów"
@@ -1102,7 +1107,7 @@ msgid "Please enter a number from 1 to %i: "
msgstr "ProszÄ podaÄ numer od 1 do %i: "
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:185
msgid "More than one package matches:"
msgstr "Pasuje wiÄcej niż jeden pakiet:"
@@ -1112,448 +1117,448 @@ msgid "Please choose the correct package: "
msgstr "ProszÄ wybraÄ poprawny pakiet: "
#. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:251
msgid "Unknown state"
msgstr "Nieznany stan"
#. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
msgid "Starting"
msgstr "Rozpoczynanie"
#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
msgid "Waiting in queue"
msgstr "Oczekiwanie w kolejce"
#. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
msgstr "Wykonywanie"
#. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
msgid "Querying"
msgstr "Odpytywanie"
#. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
msgstr "Pobieranie informacji"
#. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
msgid "Removing packages"
msgstr "Usuwanie pakietu"
#. TRANSLATORS: transaction state, downloading package files
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
msgid "Downloading packages"
msgstr "Pobieranie pakietów"
#. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
msgstr "OdÅwieżanie listy oprogramowania"
#. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
msgid "Installing updates"
msgstr "Instalowanie aktualizacji"
#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
msgid "Cleaning up packages"
msgstr "Czyszczenie pakietów"
#. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
msgid "Obsoleting packages"
msgstr "ZastÄpowanie pakietów"
#. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
msgid "Resolving dependencies"
msgstr "RozwiÄ
zywanie zależnoÅci"
#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
msgid "Checking signatures"
msgstr "Sprawdzanie podpisów"
#. TRANSLATORS: transaction state, when we return to a previous system state
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
msgid "Rolling back"
msgstr "Przywracanie"
#. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
msgstr "Testowanie zmian"
#. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
msgstr "Wprowadzanie zmian"
#. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
msgid "Requesting data"
msgstr "Å»Ä
danie danych"
#. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
msgid "Finished"
msgstr "UkoÅczono"
#. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
msgstr "Anulowanie"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
msgid "Downloading repository information"
msgstr "Pobieranie informacji o repozytorium"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
msgid "Downloading list of packages"
msgstr "Pobieranie listy pakietów"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
msgstr "Pobieranie list plików"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
msgstr "Pobieranie listy zmian"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
msgid "Downloading groups"
msgstr "Pobieranie grup"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
msgid "Downloading update information"
msgstr "Pobieranie informacji o aktualizacji"
#. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
msgstr "Ponowne umieszczanie plików w pakietach"
#. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
msgid "Loading cache"
msgstr "Wczytywanie pamiÄci podrÄcznej"
#. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
msgid "Scanning applications"
msgstr "Skanowanie programów"
#. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
msgid "Generating package lists"
msgstr "Tworzenie list pakietów"
#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
msgid "Waiting for package manager lock"
msgstr "Oczekiwanie na blokadÄ menedżera pakietów"
#. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
msgstr "Oczekiwanie na uwierzytelnienie"
#. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
msgid "Updating running applications"
msgstr "Aktualizowanie uruchomionych programów"
#. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
msgid "Checking applications in use"
msgstr "Sprawdzanie używanych programów"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
msgstr "Sprawdzanie używanych bibliotek"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
msgid "Copying files"
msgstr "Kopiowanie plików"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:413
msgid "Trivial"
msgstr "Drobna"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
msgid "Normal"
msgstr "Normalna"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
msgid "Important"
msgstr "Ważna"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
msgid "Security"
msgstr "BezpieczeÅstwa"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
msgstr "NaprawiajÄ
ca bÅÄdy"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
msgid "Enhancement"
msgstr "Ulepszenie"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
msgid "Blocked"
msgstr "Zablokowana"
#. TRANSLATORS: The state of a package
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
msgid "Installed"
msgstr "Zainstalowana"
#. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:447
msgid "Available"
msgstr "DostÄpna"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:465
msgid "Downloading"
msgstr "Pobieranie"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
msgid "Updating"
msgstr "Aktualizowanie"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
msgid "Installing"
msgstr "Instalowanie"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
msgid "Removing"
msgstr "Usuwanie"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
msgid "Cleaning up"
msgstr "Czyszczenie"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
msgid "Obsoleting"
msgstr "ZastÄpowanie"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
msgid "Reinstalling"
msgstr "Ponowne instalowanie"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:507
msgid "Downloaded"
msgstr "Pobierano"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
msgid "Removed"
msgstr "UsuniÄto"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
msgstr "Wyczyszczono"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
msgstr "ZastÄ
piono"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
msgstr "Zainstalowano ponownie"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
msgstr "Nieznany typ roli"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
msgid "Getting dependencies"
msgstr "Pobieranie zależnoÅci"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
msgid "Getting update details"
msgstr "Pobieranie szczegóÅów aktualizacji"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
msgid "Getting details"
msgstr "Pobieranie szczegóÅów"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
msgid "Getting requires"
msgstr "Pobieranie wymagaÅ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
msgid "Getting updates"
msgstr "Pobieranie aktualizacji"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
msgid "Searching by details"
msgstr "Wyszukiwanie wedÅug szczegóÅów"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
msgid "Searching by file"
msgstr "Wyszukiwanie wedÅug plików"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
msgid "Searching groups"
msgstr "Wyszukiwanie grup"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
msgid "Searching by name"
msgstr "Wyszukiwanie wedÅug nazw"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
msgid "Installing files"
msgstr "Instalowanie plików"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
msgstr "OdÅwieżanie pamiÄci podrÄcznej"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
msgid "Updating packages"
msgstr "Aktualizowanie pakietów"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
msgstr "Aktualizowanie systemu"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
msgid "Canceling"
msgstr "Anulowanie"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
msgid "Getting repositories"
msgstr "Pobieranie repozytoriów"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
msgid "Enabling repository"
msgstr "WÅÄ
czanie repozytorium"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
msgstr "Ustawianie danych"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
msgid "Resolving"
msgstr "RozwiÄ
zywanie"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
msgid "Getting file list"
msgstr "Pobieranie listy plików"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
msgid "Getting provides"
msgstr "Pobieranie dostarczanych"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
msgid "Installing signature"
msgstr "Instalowanie podpisu"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
msgid "Getting packages"
msgstr "Pobieranie pakietów"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
msgstr "Akceptowanie licencji"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
msgid "Getting upgrades"
msgstr "Pobieranie aktualizacji"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
msgid "Getting categories"
msgstr "Pobieranie kategorii"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
msgid "Getting transactions"
msgstr "Pobieranie transakcji"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
msgid "Simulating install"
msgstr "Symulowanie instalacji"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
msgid "Simulating remove"
msgstr "Symulowanie usuniÄcia"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
msgstr "Symulowanie aktualizacji"
@@ -1997,24 +2002,24 @@ msgid "Show debugging information for all files"
msgstr "WyÅwietla informacje o debugowaniu dla wszystkich plików"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "Debuguje podane moduÅy"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "Debuguje podane funkcje"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "Zapisuje dane debugowania do pliku"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "Opcje debugowania"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "WyÅwietla opcje debugowania"
commit 9bdd05966612891eb744b290558ceb2bd9943bd6
Author: Richard Hughes <richard at hughsie.com>
Date: Thu Apr 1 22:09:19 2010 +0100
Add support for the 'frontend-socket' hint and pass it to backends
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 81751cd..25a5534 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -93,6 +93,7 @@ struct _PkBackendPrivate
gboolean use_threads;
gchar *transaction_id;
gchar *locale;
+ gchar *frontend_socket;
gchar *name;
gchar *proxy_ftp;
gchar *proxy_http;
@@ -1314,6 +1315,34 @@ pk_backend_set_locale (PkBackend *backend, const gchar *code)
}
/**
+ * pk_backend_get_frontend_socket:
+ *
+ * Return value: session frontend_socket, e.g. /tmp/socket.345
+ **/
+gchar *
+pk_backend_get_frontend_socket (PkBackend *backend)
+{
+ g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
+ return g_strdup (backend->priv->frontend_socket);
+}
+
+/**
+ * pk_backend_set_frontend_socket:
+ **/
+gboolean
+pk_backend_set_frontend_socket (PkBackend *backend, const gchar *frontend_socket)
+{
+ g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
+ g_return_val_if_fail (backend->priv->locked != FALSE, FALSE);
+
+ egg_debug ("frontend_socket changed to %s", frontend_socket);
+ g_free (backend->priv->frontend_socket);
+ backend->priv->frontend_socket = g_strdup (frontend_socket);
+
+ return TRUE;
+}
+
+/**
* pk_backend_details:
**/
gboolean
@@ -2404,6 +2433,7 @@ pk_backend_finalize (GObject *object)
g_free (backend->priv->proxy_ftp);
g_free (backend->priv->name);
g_free (backend->priv->locale);
+ g_free (backend->priv->frontend_socket);
g_free (backend->priv->transaction_id);
g_object_unref (backend->priv->results);
g_object_unref (backend->priv->time);
@@ -3043,6 +3073,7 @@ pk_backend_init (PkBackend *backend)
backend->priv->handle = NULL;
backend->priv->name = NULL;
backend->priv->locale = NULL;
+ backend->priv->frontend_socket = NULL;
backend->priv->transaction_id = NULL;
backend->priv->proxy_http = NULL;
backend->priv->proxy_ftp = NULL;
diff --git a/src/pk-backend.h b/src/pk-backend.h
index 923b36f..48d083e 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -72,6 +72,8 @@ gboolean pk_backend_set_simultaneous_mode (PkBackend *backend,
gboolean simultaneous);
gboolean pk_backend_set_locale (PkBackend *backend,
const gchar *code);
+gboolean pk_backend_set_frontend_socket (PkBackend *backend,
+ const gchar *frontend_socket);
/* get the state */
gboolean pk_backend_get_allow_cancel (PkBackend *backend);
@@ -84,6 +86,7 @@ guint pk_backend_get_runtime (PkBackend *backend);
gchar *pk_backend_get_proxy_ftp (PkBackend *backend);
gchar *pk_backend_get_proxy_http (PkBackend *backend);
gchar *pk_backend_get_locale (PkBackend *backend);
+gchar *pk_backend_get_frontend_socket (PkBackend *backend);
/* signal helpers */
gboolean pk_backend_finished (PkBackend *backend);
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 5b51e30..c78f2db 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -103,6 +103,7 @@ struct PkTransactionPrivate
PkHintEnum background;
PkHintEnum interactive;
gchar *locale;
+ gchar *frontend_socket;
guint uid;
EggDbusMonitor *monitor;
PkBackend *backend;
@@ -1624,6 +1625,9 @@ pk_transaction_set_running (PkTransaction *transaction)
else
pk_backend_set_locale (priv->backend, priv->locale);
+ /* set the frontend socket if it exists */
+ pk_backend_set_frontend_socket (priv->backend, priv->frontend_socket);
+
/* set the role */
pk_backend_set_role (priv->backend, priv->role);
egg_debug ("setting role for %s to %s", priv->tid, pk_role_enum_to_string (priv->role));
@@ -4487,6 +4491,46 @@ pk_transaction_set_hint (PkTransaction *transaction, const gchar *key, const gch
goto out;
}
+ /* frontend_socket=/tmp/socket.3456 */
+ if (g_strcmp0 (key, "frontend-socket") == 0) {
+
+ /* already set */
+ if (priv->frontend_socket != NULL) {
+ g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
+ "Already set frontend-socket to %s", priv->frontend_socket);
+ ret = FALSE;
+ goto out;
+ }
+
+ /* nothing provided */
+ if (value == NULL || value[0] == '\0') {
+ g_set_error_literal (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
+ "Could not set frontend-socket to nothing");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* nothing provided */
+ if (value[0] != '/') {
+ g_set_error_literal (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
+ "frontend-socket has to be an absolute path");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* socket does not exist */
+ if (!g_file_test (value, G_FILE_TEST_EXISTS)) {
+ g_set_error_literal (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_NOT_SUPPORTED,
+ "frontend-socket does not exist");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* success */
+ priv->frontend_socket = g_strdup (value);
+ goto out;
+ }
+
/* background=true */
if (g_strcmp0 (key, "background") == 0) {
priv->background = pk_hint_enum_from_string (value);
@@ -5407,6 +5451,7 @@ pk_transaction_init (PkTransaction *transaction)
transaction->priv->tid = NULL;
transaction->priv->sender = NULL;
transaction->priv->locale = NULL;
+ transaction->priv->frontend_socket = NULL;
#ifdef USE_SECURITY_POLKIT
transaction->priv->subject = NULL;
#endif
@@ -5498,6 +5543,7 @@ pk_transaction_finalize (GObject *object)
#endif
g_free (transaction->priv->last_package_id);
g_free (transaction->priv->locale);
+ g_free (transaction->priv->frontend_socket);
g_free (transaction->priv->cached_package_id);
g_free (transaction->priv->cached_key_id);
g_strfreev (transaction->priv->cached_package_ids);
commit 26eb4321e30fa5fb4f843e43a1e28547acd2e898
Author: Richard Hughes <richard at hughsie.com>
Date: Thu Apr 1 21:07:32 2010 +0100
Don't return from SetProxy() before we've got the authentication result
diff --git a/client/pk-console.c b/client/pk-console.c
index 0cb1c71..d9c1317 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1359,7 +1359,7 @@ main (int argc, char *argv[])
ftp_proxy = g_getenv ("ftp_proxy");
if (http_proxy != NULL ||
ftp_proxy != NULL) {
- ret = pk_control_set_proxy (control, http_proxy, http_proxy, NULL, &error_local);
+ ret = pk_control_set_proxy (control, http_proxy, ftp_proxy, NULL, &error_local);
if (!ret) {
/* TRANSLATORS: The user specified an incorrect filter */
error = g_error_new (1, 0, "%s: %s", _("The proxy could not be set"), error_local->message);
diff --git a/src/pk-engine.c b/src/pk-engine.c
index fcd8c87..022c82e 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -691,7 +691,7 @@ pk_engine_suggest_daemon_quit (PkEngine *engine, GError **error)
* pk_engine_set_proxy_internal:
**/
static gboolean
-pk_engine_set_proxy_internal (PkEngine *engine)
+pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender)
{
gboolean ret;
guint uid;
@@ -705,14 +705,14 @@ pk_engine_set_proxy_internal (PkEngine *engine)
}
/* get uid */
- uid = pk_dbus_get_uid (engine->priv->dbus, engine->priv->sender);
+ uid = pk_dbus_get_uid (engine->priv->dbus, sender);
if (uid == G_MAXUINT) {
egg_warning ("failed to get the uid");
goto out;
}
/* get session */
- session = pk_dbus_get_session (engine->priv->dbus, engine->priv->sender);
+ session = pk_dbus_get_session (engine->priv->dbus, sender);
if (session == NULL) {
egg_warning ("failed to get the session");
goto out;
@@ -731,41 +731,64 @@ out:
}
#ifdef USE_SECURITY_POLKIT
+typedef struct {
+ DBusGMethodInvocation *context;
+ PkEngine *engine;
+ gchar *sender;
+} PkEngineDbusState;
+#endif
+
+#ifdef USE_SECURITY_POLKIT
/**
* pk_engine_action_obtain_authorization:
**/
static void
-pk_engine_action_obtain_authorization_finished_cb (GObject *source_object, GAsyncResult *res, PkEngine *engine)
+pk_engine_action_obtain_authorization_finished_cb (GObject *source_object, GAsyncResult *res, PkEngineDbusState *state)
{
PolkitAuthorizationResult *result;
- GError *error = NULL;
+ GError *error_local = NULL;
+ GError *error;
gboolean ret;
/* finish the call */
- result = polkit_authority_check_authorization_finish (engine->priv->authority, res, &error);
+ result = polkit_authority_check_authorization_finish (state->engine->priv->authority, res, &error_local);
/* failed */
if (result == NULL) {
- egg_warning ("failed to check for auth: %s", error->message);
- g_error_free (error);
+ error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ "setting the proxy failed, could not check for auth: %s", error_local->message);
+ dbus_g_method_return_error (state->context, error);
+ g_error_free (error_local);
goto out;
}
/* did not auth */
if (!polkit_authorization_result_get_is_authorized (result)) {
- egg_warning ("failed to obtain auth");
+ error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ "failed to obtain auth");
+ dbus_g_method_return_error (state->context, error);
goto out;
}
/* try to set the new proxy and save to database */
- ret = pk_engine_set_proxy_internal (engine);
+ ret = pk_engine_set_proxy_internal (state->engine, state->sender);
if (!ret) {
- egg_warning ("setting the proxy failed");
+ error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ "setting the proxy failed");
+ dbus_g_method_return_error (state->context, error);
goto out;
}
+
+ /* all okay */
+ dbus_g_method_return (state->context);
out:
if (result != NULL)
g_object_unref (result);
+
+ /* unref state, we're done */
+ g_object_unref (state->engine);
+ g_free (state->sender);
+ g_free (state);
}
#endif
@@ -773,7 +796,7 @@ out:
* pk_engine_is_proxy_unchanged:
**/
static gboolean
-pk_engine_is_proxy_unchanged (PkEngine *engine, const gchar *proxy_http, const gchar *proxy_ftp)
+pk_engine_is_proxy_unchanged (PkEngine *engine, const gchar *sender, const gchar *proxy_http, const gchar *proxy_ftp)
{
guint uid;
gboolean ret = FALSE;
@@ -782,16 +805,16 @@ pk_engine_is_proxy_unchanged (PkEngine *engine, const gchar *proxy_http, const g
gchar *proxy_ftp_tmp = NULL;
/* get uid */
- uid = pk_dbus_get_uid (engine->priv->dbus, engine->priv->sender);
+ uid = pk_dbus_get_uid (engine->priv->dbus, sender);
if (uid == G_MAXUINT) {
- egg_warning ("failed to get the uid for %s", engine->priv->sender);
+ egg_warning ("failed to get the uid for %s", sender);
goto out;
}
/* get session */
- session = pk_dbus_get_session (engine->priv->dbus, engine->priv->sender);
+ session = pk_dbus_get_session (engine->priv->dbus, sender);
if (session == NULL) {
- egg_warning ("failed to get the session for %s", engine->priv->sender);
+ egg_warning ("failed to get the session for %s", sender);
goto out;
}
@@ -820,9 +843,11 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
guint len;
GError *error = NULL;
gboolean ret;
+ gchar *sender = NULL;
#ifdef USE_SECURITY_POLKIT
PolkitSubject *subject;
PolkitDetails *details;
+ PkEngineDbusState *state;
#endif
g_return_if_fail (PK_IS_ENGINE (engine));
@@ -839,7 +864,7 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
if (len == 1024) {
error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "http proxy was too long");
dbus_g_method_return_error (context, error);
- return;
+ goto out;
}
/* check length of ftp */
@@ -847,19 +872,18 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
if (len == 1024) {
error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "ftp proxy was too long");
dbus_g_method_return_error (context, error);
- return;
+ goto out;
}
/* save sender */
- g_free (engine->priv->sender);
- engine->priv->sender = dbus_g_method_get_sender (context);
+ sender = dbus_g_method_get_sender (context);
/* is exactly the same proxy? */
- ret = pk_engine_is_proxy_unchanged (engine, proxy_http, proxy_ftp);
+ ret = pk_engine_is_proxy_unchanged (engine, sender, proxy_http, proxy_ftp);
if (ret) {
egg_debug ("not changing proxy as the same as before");
dbus_g_method_return (context);
- return;
+ goto out;
}
/* save these so we can set them after the auth success */
@@ -867,17 +891,23 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
g_free (engine->priv->proxy_ftp);
engine->priv->proxy_http = g_strdup (proxy_http);
engine->priv->proxy_ftp = g_strdup (proxy_ftp);
- egg_debug ("changing http proxy to %s for %s", proxy_http, engine->priv->sender);
- egg_debug ("changing ftp proxy to %s for %s", proxy_ftp, engine->priv->sender);
+ egg_debug ("changing http proxy to %s for %s", proxy_http, sender);
+ egg_debug ("changing ftp proxy to %s for %s", proxy_ftp, sender);
#ifdef USE_SECURITY_POLKIT
/* check subject */
- subject = polkit_system_bus_name_new (engine->priv->sender);
+ subject = polkit_system_bus_name_new (sender);
/* insert details about the authorization */
details = polkit_details_new ();
polkit_details_insert (details, "role", pk_role_enum_to_string (PK_ROLE_ENUM_UNKNOWN));
+ /* cache state */
+ state = g_new0 (PkEngineDbusState, 1);
+ state->context = context;
+ state->engine = g_object_ref (engine);
+ state->sender = g_strdup (sender);
+
/* do authorization async */
polkit_authority_check_authorization (engine->priv->authority, subject,
"org.freedesktop.packagekit.system-network-proxy-configure",
@@ -885,7 +915,7 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
NULL,
(GAsyncReadyCallback) pk_engine_action_obtain_authorization_finished_cb,
- engine);
+ state);
/* check_authorization ref's this */
g_object_unref (details);
@@ -897,11 +927,12 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
if (!ret) {
error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "setting the proxy failed");
dbus_g_method_return_error (context, error);
- return;
+ goto out;
}
-#endif
+
/* all okay */
dbus_g_method_return (context);
+#endif
/* reset the timer */
pk_engine_reset_timer (engine);
@@ -909,6 +940,8 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
#ifdef USE_SECURITY_POLKIT
g_object_unref (subject);
#endif
+out:
+ g_free (sender);
}
/**
@@ -1284,7 +1317,6 @@ pk_engine_init (PkEngine *engine)
engine->priv->backend_name = NULL;
engine->priv->backend_description = NULL;
engine->priv->backend_author = NULL;
- engine->priv->sender = NULL;
engine->priv->locked = FALSE;
engine->priv->distro_id = NULL;
@@ -1448,7 +1480,6 @@ pk_engine_finalize (GObject *object)
g_free (engine->priv->mime_types);
g_free (engine->priv->proxy_http);
g_free (engine->priv->proxy_ftp);
- g_free (engine->priv->sender);
g_free (engine->priv->backend_name);
g_free (engine->priv->backend_description);
g_free (engine->priv->backend_author);
commit 28be6ee257f81d9db1fd7ce8b45edf3b5564a610
Author: Richard Hughes <richard at hughsie.com>
Date: Thu Apr 1 20:42:54 2010 +0100
pkcon: if http_proxy or ftp_proxy are set in the environment, use them
diff --git a/client/pk-console.c b/client/pk-console.c
index a7240dc..0cb1c71 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -38,6 +38,7 @@
#define PK_EXIT_CODE_SYNTAX_INVALID 3
#define PK_EXIT_CODE_FILE_NOT_FOUND 4
#define PK_EXIT_CODE_NOTHING_USEFUL 5
+#define PK_EXIT_CODE_CANNOT_SETUP 6
static GMainLoop *loop = NULL;
static PkBitfield roles;
@@ -1241,6 +1242,7 @@ main (int argc, char *argv[])
{
gboolean ret;
GError *error = NULL;
+ GError *error_local = NULL;
gboolean background = FALSE;
gboolean noninteractive = FALSE;
gboolean plain = FALSE;
@@ -1250,6 +1252,8 @@ main (int argc, char *argv[])
gchar *filter = NULL;
gchar *summary = NULL;
const gchar *mode;
+ const gchar *http_proxy;
+ const gchar *ftp_proxy;
const gchar *value = NULL;
const gchar *details = NULL;
const gchar *parameter = NULL;
@@ -1350,6 +1354,21 @@ main (int argc, char *argv[])
"simulate", !noninteractive,
NULL);
+ /* set the proxy */
+ http_proxy = g_getenv ("http_proxy");
+ ftp_proxy = g_getenv ("ftp_proxy");
+ if (http_proxy != NULL ||
+ ftp_proxy != NULL) {
+ ret = pk_control_set_proxy (control, http_proxy, http_proxy, NULL, &error_local);
+ if (!ret) {
+ /* TRANSLATORS: The user specified an incorrect filter */
+ error = g_error_new (1, 0, "%s: %s", _("The proxy could not be set"), error_local->message);
+ g_error_free (error_local);
+ retval = PK_EXIT_CODE_CANNOT_SETUP;
+ goto out;
+ }
+ }
+
/* check filter */
if (filter != NULL) {
filters = pk_filter_bitfield_from_string (filter);
diff --git a/client/pkcon.xml b/client/pkcon.xml
index 921b23c..9000919 100644
--- a/client/pkcon.xml
+++ b/client/pkcon.xml
@@ -108,6 +108,14 @@ manpage.1: manpage.xml
<para>Nothing useful was done.</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>
+ <option>6</option>
+ </term>
+ <listitem>
+ <para>The initial setup failed, e.g. setting the network proxy.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
diff --git a/lib/packagekit-glib2/pk-control-sync.c b/lib/packagekit-glib2/pk-control-sync.c
index 7fd3dfe..e7410c4 100644
--- a/lib/packagekit-glib2/pk-control-sync.c
+++ b/lib/packagekit-glib2/pk-control-sync.c
@@ -196,3 +196,58 @@ pk_control_suggest_daemon_quit (PkControl *control, GCancellable *cancellable, G
return ret;
}
+/**
+ * pk_control_set_proxy_cb:
+ **/
+static void
+pk_control_set_proxy_cb (PkControl *control, GAsyncResult *res, PkControlHelper *helper)
+{
+ /* get the result */
+ helper->ret = pk_control_set_proxy_finish (control, res, helper->error);
+ g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_control_set_proxy:
+ * @control: a valid #PkControl instance
+ * @proxy_http: the HTTP proxy server
+ * @proxy_ftp: the FTP proxy server
+ * @cancellable: a #GCancellable or %NULL
+ * @error: A #GError or %NULL
+ *
+ * Sets the network proxy to use in the daemon.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: %TRUE if the proxy was set correctly
+ *
+ * Since: 0.6.3
+ **/
+gboolean
+pk_control_set_proxy (PkControl *control, const gchar *proxy_http, const gchar *proxy_ftp, GCancellable *cancellable, GError **error)
+{
+ gboolean ret;
+ PkControlHelper *helper;
+
+ g_return_val_if_fail (PK_IS_CONTROL (control), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* create temp object */
+ helper = g_new0 (PkControlHelper, 1);
+ helper->loop = g_main_loop_new (NULL, FALSE);
+ helper->error = error;
+
+ /* run async method */
+ pk_control_set_proxy_async (control, proxy_http, proxy_ftp,
+ cancellable, (GAsyncReadyCallback) pk_control_set_proxy_cb, helper);
+ g_main_loop_run (helper->loop);
+
+ ret = helper->ret;
+
+ /* free temp object */
+ g_main_loop_unref (helper->loop);
+ g_free (helper);
+
+ return ret;
+}
+
diff --git a/lib/packagekit-glib2/pk-control-sync.h b/lib/packagekit-glib2/pk-control-sync.h
index 73592a4..74be972 100644
--- a/lib/packagekit-glib2/pk-control-sync.h
+++ b/lib/packagekit-glib2/pk-control-sync.h
@@ -36,6 +36,12 @@ gchar **pk_control_get_transaction_list (PkControl *control,
gboolean pk_control_suggest_daemon_quit (PkControl *control,
GCancellable *cancellable,
GError **error);
+gboolean pk_control_set_proxy (PkControl *control,
+ const gchar *proxy_http,
+ const gchar *proxy_ftp,
+ GCancellable *cancellable,
+ GError **error);
+
G_END_DECLS
commit 2f668c94b6895e2cba2f98ffc25d36a9a834495d
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Mar 31 22:15:42 2010 +0100
trivial: update the spec file to the latest from fedora
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index d6b3b16..293f899 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -1,9 +1,8 @@
-%define glib2_version 2.16.1
-%define dbus_version 1.1.1
-%define dbus_glib_version 0.74
-%define polkit_version 0.92
-%define libnm_glib_version 0.6.4
-%define alphatag #ALPHATAG#
+%define glib2_version 2.16.1
+%define dbus_version 1.1.1
+%define dbus_glib_version 0.74
+%define polkit_version 0.92
+%define alphatag #ALPHATAG#
%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
commit 8bf6bbe200f11abe4c527c7cf0aeb270aaec19f5
Author: Richard Hughes <richard at hughsie.com>
Date: Tue Mar 30 17:07:25 2010 +0100
yum: Do not abort if the package-id is not unique in the reposet
This can happen if you do 'ln -s newpackage oldpackage' and then run
createrepo. Fixes rh#569460
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 42dc70c..0d608ed 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -1008,16 +1008,16 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except Exception, e:
raise PkError(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
- # multiple entries
- if len(pkgs) > 1:
- raise PkError(ERROR_INTERNAL_ERROR, "more than one package match for %s" % _format_package_id(package_id))
+ # nothing found
+ if len(pkgs) == 0:
+ return None, False
- # one NEVRA in a single repo
- if len(pkgs) == 1:
- return pkgs[0], False
+ # multiple entries
+ if len(pkgs) > 1:
+ self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, "more than one package match for %s" % _format_package_id(package_id))
- # nothing found
- return None, False
+ # return first entry
+ return pkgs[0], False
def get_requires(self, filters, package_ids, recursive):
'''
commit 174d14e2ba500de41d5ddc58ee7dcc42a2c4a32a
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Mar 29 12:59:01 2010 +0100
trivial: post release version bump
diff --git a/RELEASE b/RELEASE
index c83e911..a7ba2e0 100644
--- a/RELEASE
+++ b/RELEASE
@@ -2,7 +2,7 @@ PackageKit Release Notes
1. Write NEWS entries for PackageKit in the same format as usual.
-git shortlog PACKAGEKIT_0_6_2.. | grep -i -v trivial | grep -v Merge > NEWS.new
+git shortlog PACKAGEKIT_0_6_3.. | grep -i -v trivial | grep -v Merge > NEWS.new
--------------------------------------------------------------------------------
Version 0.6.x
@@ -28,8 +28,8 @@ Bugfixes:
4. Commit changes in PackageKit git:
-git commit -a -m "Release version 0.6.3"
-git tag -s -f -m "Release 0.6.3" PACKAGEKIT_0_6_3
+git commit -a -m "Release version 0.6.4"
+git tag -s -f -m "Release 0.6.4" PACKAGEKIT_0_6_4
<gpg password>
git push --tags
git push
diff --git a/configure.ac b/configure.ac
index b69c230..c681855 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.65)
m4_define([pk_major_version], [0])
m4_define([pk_minor_version], [6])
-m4_define([pk_micro_version], [3])
+m4_define([pk_micro_version], [4])
m4_define([pk_version],
[pk_major_version.pk_minor_version.pk_micro_version])
More information about the PackageKit-commit
mailing list