[PackageKit-commit] packagekit: Branch 'PACKAGEKIT_0_6_X' - 39 commits

Richard Hughes hughsient at kemper.freedesktop.org
Wed Apr 11 07:19:55 PDT 2012


 NEWS                                   |   39 +++
 RELEASE                                |   12 -
 backends/alpm/Makefile.am              |    2 
 backends/alpm/pk-backend-alpm.c        |  134 +++++++++--
 backends/alpm/pk-backend-alpm.h        |    3 
 backends/alpm/pk-backend-config.c      |  369 ++++++++++++++++++++++-----------
 backends/alpm/pk-backend-config.h      |    3 
 backends/alpm/pk-backend-databases.c   |  127 ++++++++---
 backends/alpm/pk-backend-databases.h   |   10 
 backends/alpm/pk-backend-depends.c     |   19 -
 backends/alpm/pk-backend-error.c       |  287 +++++++++++++------------
 backends/alpm/pk-backend-error.h       |    4 
 backends/alpm/pk-backend-groups.c      |    2 
 backends/alpm/pk-backend-groups.h      |    2 
 backends/alpm/pk-backend-install.c     |   33 ++
 backends/alpm/pk-backend-packages.c    |   86 ++++---
 backends/alpm/pk-backend-packages.h    |   11 
 backends/alpm/pk-backend-remove.c      |   44 +--
 backends/alpm/pk-backend-search.c      |   52 ++--
 backends/alpm/pk-backend-sync.c        |  123 ++++++-----
 backends/alpm/pk-backend-transaction.c |  324 ++++++++++++++++------------
 backends/alpm/pk-backend-transaction.h |    2 
 backends/alpm/pk-backend-update.c      |   63 +++--
 backends/entropy/entropyBackend.py     |   18 +
 backends/entropy/pk-backend-entropy.c  |  260 ++++++++++-------------
 backends/portage/pk-backend-portage.c  |  222 ++++++++-----------
 backends/portage/portageBackend.py     |   75 ++++--
 backends/yum/yumBackend.py             |   25 --
 backends/zif/pk-backend-zif.c          |   16 +
 client/Makefile.am                     |    1 
 configure.ac                           |   10 
 contrib/browser-plugin/pk-main.c       |    5 
 contrib/command-not-found/Makefile.am  |    1 
 contrib/debuginfo-install/Makefile.am  |    1 
 contrib/gstreamer-plugin/Makefile.am   |    1 
 contrib/pm-utils/95packagekit          |    2 
 lib/packagekit-glib2/pk-desktop.c      |    8 
 lib/packagekit-glib2/pk-results.c      |    4 
 lib/packagekit-glib2/pk-self-test.c    |    2 
 lib/python/packagekit/filter.py        |   13 -
 src/Makefile.am                        |    1 
 src/pk-transaction.c                   |    7 
 42 files changed, 1442 insertions(+), 981 deletions(-)

New commits:
commit 3e28f03a2816102ef2aa033006179b7782fb4d2e
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Apr 11 15:18:18 2012 +0100

    Release version 0.6.22

diff --git a/NEWS b/NEWS
index 238367f..af0cfbc 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,42 @@
+Version 0.6.22
+~~~~~~~~~~~~~~
+Released: 2012-04-11
+
+Backends:
+ - alpm: Add GPGDir config option (Jonathan Conder)
+ - alpm: Add new error codes (Jonathan Conder)
+ - alpm: Allow forced install of untrusted packages (Jonathan Conder)
+ - alpm: Fix freedesktop.org bug #44713 (Jonathan Conder)
+ - alpm: Fix locale and proxy support (Jonathan Conder)
+ - alpm: Implement preliminary signature checking (Jonathan Conder)
+ - alpm: Make use of new package origin API (Jonathan Conder)
+ - alpm: Port configuration logic to new API (Jonathan Conder)
+ - alpm: Port enum constants to new API (Jonathan Conder)
+ - alpm: Port error messagess to new API (Jonathan Conder)
+ - alpm: Port function calls to new API (Jonathan Conder)
+ - alpm: Port public structs to new API (Jonathan Conder)
+ - alpm: Port type names to new API (Jonathan Conder)
+ - alpm: Remove ShowSize option, add VerbosePkgLists (Jonathan Conder)
+ - alpm: Report new informational updates to frontend (Jonathan Conder)
+ - alpm: Update error codes again (Jonathan Conder)
+ - entropy: Add support to ConfigurationUpdates (Fabio Erculiani)
+ - entropy: Drop PK_BACKEND_OPTIONS macro usage (Fabio Erculiani)
+ - portage: Drop PK_BACKEND_OPTIONS macro usage (Fabio Erculiani)
+ - portage: Port code to new Layman API and fix usage with newer Portage API (Fabio Erculiani)
+ - yum: Always set GPG checking members if present (Nils Philippsen)
+ - yum: Don't request authorization for trusted packages (Nils Philippsen)
+ - zif: Ensure the files are sorted by name before returning them to the daemon (Richard Hughes)
+ - zif: Fix segfault of the daemon when a program does Resolve("") (Richard Hughes)
+
+Bugfixes:
+ - browser-plugin: Make it compile with newest xulrunner (Matthias Klumpp)
+ - Do not allow an empty resolve call to be passed down to the backends (Richard Hughes)
+ - Drop --print-reply from dbus-send command used on suspend/resume (Adam Williamson)
+ - Fix builddir != srcdir issue (Ryan Lortie)
+ - Fix transfer annotation of pk_results_get_package_sack (Vincent Untz)
+ - Fix transfer annotations for GPtrArray returns (Martin Pitt)
+ - python: Speed up get_package_list (Tomáš Trnka)
+
 Version 0.6.21
 ~~~~~~~~~~~~~~
 Released: 2011-12-05
diff --git a/RELEASE b/RELEASE
index 06e7dfe..7b57379 100644
--- a/RELEASE
+++ b/RELEASE
@@ -7,7 +7,7 @@ git shortlog PACKAGEKIT_0_6_21.. | grep -i -v trivial | grep -v Merge > NEWS.new
 --------------------------------------------------------------------------------
 Version 0.6.22
 ~~~~~~~~~~~~~~
-Released: 2011-xx-xx
+Released: 2012-xx-xx
 
 Notes:
 
commit 4f67891894b3571215c123c204db84a059b92789
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Apr 11 15:17:51 2012 +0100

    trivial: fix 7f806e269cccffd442799b1f91c67e3b31fdddb7 compile failure

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 886cba6..55f6d15 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -4449,7 +4449,7 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 				     PK_TRANSACTION_ERROR_INPUT_INVALID,
 				     "Too few items to process");
 		pk_transaction_release_tid (transaction);
-		goto out;
+		return;
 	}
 	max_length = pk_conf_get_int (transaction->priv->conf, "MaximumItemsToResolve");
 	if (length > max_length) {
commit 8b3cf4a547cf43242a4009c24c7b67a2ad243fac
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Fri Apr 6 16:58:16 2012 +0200

    entropy: add support to ConfigurationUpdates

diff --git a/backends/entropy/entropyBackend.py b/backends/entropy/entropyBackend.py
index d6ce0ed..8b3d359 100755
--- a/backends/entropy/entropyBackend.py
+++ b/backends/entropy/entropyBackend.py
@@ -896,11 +896,19 @@ class PackageKitEntropyBackend(PackageKitBaseBackend, PackageKitEntropyMixin):
         self._log_message(__name__, "_generic_message:", decolorize(message))
 
     def _config_files_message(self):
-        scandata = self._entropy.PackageFileUpdates().scan(dcache = True,
-            quiet = True)
-        if scandata is None:
-            return
-        if len(scandata) > 0:
+        has_updates = False
+        if hasattr(self._entropy, "ConfigurationUpdates"):
+            updates = self._entropy.ConfigurationUpdates()
+            scandata = updates.get(quiet=True)
+            has_updates = len(scandata) > 0
+        else:
+            scandata = self._entropy.PackageFileUpdates().scan(
+                dcache = True, quiet = True)
+            if scandata is None:
+                return
+            has_updates = len(scandata) > 0
+
+        if has_updates:
             message = "Some configuration files need updating."
             message += ";You should use 'equo conf update' to update them"
             message += ";If you can't do that, ask your system administrator."
commit ca620312b627a2831e6c3e9f60126233a0f137e8
Author: Tomáš Trnka <tomastrnka at gmx.com>
Date:   Wed Apr 4 12:17:45 2012 +0100

    python: Speed up get_package_list()
    
    This patch replaces the quadratic monstrosity with an approximately linear
    equivalent.
    
    On my system (40297 installed+available packages) this gets the time spent in
    get_package_list to 1.3 s from the initial ~600 s. In other words, pkcon
    refresh now spends just about 20 s CPU time instead of 8 minutes.
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/lib/python/packagekit/filter.py b/lib/python/packagekit/filter.py
index 0eedd15..d66f630 100644
--- a/lib/python/packagekit/filter.py
+++ b/lib/python/packagekit/filter.py
@@ -21,6 +21,7 @@
 # imports
 from enums import *
 from package import PackagekitPackage
+import collections
 
 class PackagekitFilter(object, PackagekitPackage):
 
@@ -83,17 +84,21 @@ class PackagekitFilter(object, PackagekitPackage):
             if self._filter_base(pkg):
                 self.package_list.append((pkg, state))
 
+        # prepare lookup table of installed packages
+        installed_dict = collections.defaultdict(list)
+        for pkg, state in self.package_list:
+            if state is INFO_INSTALLED:
+                installed_dict[self._pkg_get_name(pkg)].append(pkg)
+
         # check there are not available versions in the package list
         # that are older than the installed version
         package_list = self.package_list
         self.package_list = []
         for pkg, state in package_list:
 
-            add = True;
+            add = True
             if state is INFO_AVAILABLE:
-                for pkg_tmp, state_tmp in self.package_list:
-                    if state_tmp is not INFO_INSTALLED:
-                        continue
+                for pkg_tmp in installed_dict[self._pkg_get_name(pkg)]:
                     rc = self._pkg_compare(pkg, pkg_tmp)
 
                     # don't add if the same as the installed package
commit 13ce6a5ea55066a7e06cce8180e05940fa16f697
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 15 14:34:17 2011 +0000

    trivial: fix up a tiny warning from valrind under make check

diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 398b2a8..221cfa2 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -1379,7 +1379,7 @@ static void
 pk_test_package_ids_func (void)
 {
 	gboolean ret;
-	gchar *package_ids_blank[] = {};
+	gchar *package_ids_blank[] = {NULL};
 	gchar **package_ids;
 
 	/* parse va_list */
commit b248d28e2d7929b8271e1ddea227eaabd56c2017
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 15 14:42:48 2011 +0000

    trivial: add a tiny theoretical memory leak in PkDesktop

diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
index 3d083e7..85e475a 100644
--- a/lib/packagekit-glib2/pk-desktop.c
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -83,8 +83,10 @@ pk_desktop_sqlite_package_cb (void *data, gint argc, gchar **argv, gchar **col_n
 
 	/* add the filename data to the array */
 	for (i=0; i<argc; i++) {
-		if (g_strcmp0 (col_name[i], "package") == 0 && argv[i] != NULL)
+		if (g_strcmp0 (col_name[i], "package") == 0 && argv[i] != NULL) {
 			*package = g_strdup (argv[i]);
+			break;
+		}
 	}
 
 	return 0;
commit 811221e80ad153bdf9b40edfa69dfad355b608bf
Author: Ryan Lortie <desrt at desrt.ca>
Date:   Wed Jan 11 16:17:17 2012 +0100

    Fix builddir != srcdir issue
    
    Because pk-version.h ends up in the build directory, we need to ensure
    that we look there when searching for includes.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=44678
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/client/Makefile.am b/client/Makefile.am
index a1bff21..6458065 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -45,6 +45,7 @@ INCLUDES =						\
 	-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE	\
 	-DPK_COMPILATION				\
 	-DG_LOG_DOMAIN=\"PackageKit\"			\
+	-I$(top_builddir)/lib				\
 	-I$(top_srcdir)/lib				\
 	$(NULL)
 
diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index 69930ff..bbd8b65 100644
--- a/contrib/command-not-found/Makefile.am
+++ b/contrib/command-not-found/Makefile.am
@@ -11,6 +11,7 @@ INCLUDES =						\
 	-DPK_COMPILATION				\
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"		\
 	-DSYSCONFDIR=\""$(sysconfdir)"\" 		\
+	-I$(top_builddir)/lib				\
 	-I$(top_srcdir)/lib
 
 libexec_PROGRAMS = pk-command-not-found
diff --git a/contrib/debuginfo-install/Makefile.am b/contrib/debuginfo-install/Makefile.am
index d60a37e..f2778b2 100644
--- a/contrib/debuginfo-install/Makefile.am
+++ b/contrib/debuginfo-install/Makefile.am
@@ -24,6 +24,7 @@ INCLUDES =						\
 	-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE	\
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"		\
 	-DSYSCONFDIR=\""$(sysconfdir)"\" 		\
+	-I$(top_builddir)/lib				\
 	-I$(top_srcdir)/lib
 
 bin_PROGRAMS = pk-debuginfo-install
diff --git a/contrib/gstreamer-plugin/Makefile.am b/contrib/gstreamer-plugin/Makefile.am
index 6b1b279..b62cac6 100644
--- a/contrib/gstreamer-plugin/Makefile.am
+++ b/contrib/gstreamer-plugin/Makefile.am
@@ -14,6 +14,7 @@ INCLUDES =						\
 	-DVERSION="\"$(VERSION)\"" 			\
 	-DPK_DATA=\"$(pkgdatadir)\"			\
 	-DPK_DB_DIR=\""$(PK_DB_DIR)"\" 			\
+	-I$(top_builddir)/lib				\
 	-I$(top_srcdir)/lib				\
 	$(NULL)
 
diff --git a/src/Makefile.am b/src/Makefile.am
index 23c4728..493c833 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -32,6 +32,7 @@ INCLUDES =						\
 	-DPK_COMPILATION				\
 	-DPOLKIT_LOCAL_I_KNOW_API_IS_SUBJECT_TO_CHANGE	\
 	-DG_LOG_DOMAIN=\"PackageKit\"			\
+	-I$(top_builddir)/lib				\
 	-I$(top_srcdir)/lib				\
 	$(NULL)
 
commit f230f39cf82f5ee5945f4f4bc6242383b165afb3
Author: Martin Pitt <martin.pitt at ubuntu.com>
Date:   Thu Feb 16 15:17:03 2012 +0100

    Fix transfer annotations for GPtrArray returns
    
    We use g_ptr_array_new_with_free_func(), so the returned GPtrArrays own the
    items and will free them. Thus transfer ownership needs to be "container", not
    "full", otherwise we'll get crashes due to double-free'ing.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=670216

diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
index 51d88ba..3d083e7 100644
--- a/lib/packagekit-glib2/pk-desktop.c
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -99,7 +99,7 @@ pk_desktop_sqlite_package_cb (void *data, gint argc, gchar **argv, gchar **col_n
  * Return all desktop files owned by a package, regardless if they are shown
  * in the main menu or not.
  *
- * Return value: (transfer full): string array of results, free with g_ptr_array_unref()
+ * Return value: (transfer container): string array of results, free with g_ptr_array_unref()
  *
  * Since: 0.5.3
  **/
@@ -142,7 +142,7 @@ out:
  * Return all desktop files owned by a package that would be shown in a menu,
  * i.e are an application
  *
- * Return value: (transfer full): string array of results, free with g_ptr_array_unref()
+ * Return value: (transfer container): string array of results, free with g_ptr_array_unref()
  *
  * Since: 0.5.3
  **/
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index a16d066..bd80fb3 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -536,7 +536,7 @@ pk_results_get_error_code (PkResults *results)
  *
  * Gets the packages from the transaction.
  *
- * Return value: (element-type PkPackage) (transfer full): A #GPtrArray array of #PkPackage's, free with g_ptr_array_unref().
+ * Return value: (element-type PkPackage) (transfer container): A #GPtrArray array of #PkPackage's, free with g_ptr_array_unref().
  *
  * Since: 0.5.2
  **/
commit ae869b4d67b1dd3b2ddd41a51ee8ce85153f1959
Author: Vincent Untz <vuntz at gnome.org>
Date:   Thu Feb 16 15:40:31 2012 +0100

    Fix transfer annotation of pk_results_get_package_sack()
    
    PkPackageSack is a normal GObject, not a container, so this should be "full".
    
    Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>

diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 06a9f8b..a16d066 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -554,7 +554,7 @@ pk_results_get_package_array (PkResults *results)
  *
  * Gets a package sack from the transaction.
  *
- * Return value: (transfer container): A #PkPackageSack of data, g_object_unref() to free.
+ * Return value: (transfer full): A #PkPackageSack of data, g_object_unref() to free.
  *
  * Since: 0.5.2
  **/
commit 681ff8d44bbb595d25f58ae6c3697b75d4a85b4b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Feb 22 09:28:39 2012 +0000

    zif: Ensure the files are sorted by name before returning them to the daemon

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index 84deeff..ff02f5f 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -2724,6 +2724,15 @@ out:
 }
 
 /**
+ * pk_backend_sort_string_cb:
+ **/
+static gint
+pk_backend_sort_string_cb (const gchar **a, const gchar **b)
+{
+	return g_strcmp0 (*a, *b);
+}
+
+/**
  * pk_backend_get_files_thread:
  */
 static gboolean
@@ -2833,6 +2842,9 @@ pk_backend_get_files_thread (PkBackend *backend)
 			goto out;
 		}
 
+		/* sort these by name and add to list */
+		g_ptr_array_sort (files,
+				  (GCompareFunc) pk_backend_sort_string_cb);
 		files_str = g_string_new ("");
 		for (j=0; j<files->len; j++) {
 			file = g_ptr_array_index (files, j);
commit ff9e60de13fe56141d0211c717dfff6ffebb4dd1
Author: Adam Williamson <awilliam at redhat.com>
Date:   Mon Feb 6 10:57:54 2012 -0800

    Drop --print-reply from dbus-send command used on suspend/resume
    
    The dbus-send command used to refresh PK's caches over a suspend/resume cycle
    included the --print-reply parameter. This causes the command not to return
    until the dbus call either succeeds or fails - in the failure case, a delay of
    25 seconds (dbus' timeout) is possible. This blocks all later resume-time
    scripts, including the one that brings the network back up. Removing the
    parameter makes the PK call non-blocking, so the rest of the system resume can
    proceed even if it doesn't work immediately, eliminating the possibility of the
    network being down for 25 seconds at system resume.
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/contrib/pm-utils/95packagekit b/contrib/pm-utils/95packagekit
index 407cd1a..73ed00c 100755
--- a/contrib/pm-utils/95packagekit
+++ b/contrib/pm-utils/95packagekit
@@ -11,7 +11,7 @@ case "$1" in
 	thaw|resume)
 		# get PackageKit to invalidate its caches and get new updates
 		dbus-send --system --dest=org.freedesktop.PackageKit \
-			  --type=method_call --print-reply \
+			  --type=method_call \
 			  /org/freedesktop/PackageKit \
 			  org.freedesktop.PackageKit.StateHasChanged \
 			  string:'resume'
commit e01ff03ee7bb368de9147eb09173f5c497d06e16
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Mar 22 11:05:08 2012 +0000

    zif: Fix segfault of the daemon when a program does Resolve("")

diff --git a/backends/zif/pk-backend-zif.c b/backends/zif/pk-backend-zif.c
index c7aec99..84deeff 100644
--- a/backends/zif/pk-backend-zif.c
+++ b/backends/zif/pk-backend-zif.c
@@ -1192,7 +1192,7 @@ pk_backend_search_thread (PkBackend *backend)
 
 			/* if the search temp is prefixed with '@' then it is a
 			 * category search, and we have to strip it */
-			if (search[0][0] == '@') {
+			if (search[0] != NULL && search[0][0] == '@') {
 				search_entries = g_strv_length (search);
 				search_stripped = g_new0 (gchar *, search_entries + 1);
 				for (i=0; i < search_entries; i++)
@@ -1238,7 +1238,7 @@ pk_backend_search_thread (PkBackend *backend)
 		} else if (role == PK_ROLE_ENUM_SEARCH_FILE) {
 			array = zif_store_array_search_file (store_array, search, state_local, &error);
 		} else if (role == PK_ROLE_ENUM_RESOLVE) {
-			if (search[0][0] == '@') {
+			if (search[0] != NULL && search[0][0] == '@') {
 				/* this is a group */
 				array = pk_backend_resolve_groups (store_array, search, state_local, &error);
 			} else {
commit 7f806e269cccffd442799b1f91c67e3b31fdddb7
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Mar 22 11:07:37 2012 +0000

    Do not allow an empty resolve call to be passed down to the backends

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index cfa935e..886cba6 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -4444,6 +4444,13 @@ pk_transaction_resolve (PkTransaction *transaction, const gchar *filter,
 
 	/* check for length sanity */
 	length = g_strv_length (packages);
+	if (length == 0) {
+		error = g_error_new (PK_TRANSACTION_ERROR,
+				     PK_TRANSACTION_ERROR_INPUT_INVALID,
+				     "Too few items to process");
+		pk_transaction_release_tid (transaction);
+		goto out;
+	}
 	max_length = pk_conf_get_int (transaction->priv->conf, "MaximumItemsToResolve");
 	if (length > max_length) {
 		error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INPUT_INVALID,
commit c21386f1eed193516c53b06749b4117eedede9d7
Author: Nils Philippsen <nils at redhat.com>
Date:   Thu Mar 29 12:02:31 2012 +0200

    yum: always set GPG checking members if present
    
    This fixes a regression introduced in commit
    1055c52d723346006d8bbb7e0f2b324c9de9b82f which caused users to be asked
    to authorize installing signed packages when they were unsigned, i.e.
    untrusted (see rhbz#717566).
    (cherry picked from commit e8174800c75240379f804ff4a3c6032d49a03a69)

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index beb027e..1cb7a8e 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -1717,25 +1717,23 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def _set_only_trusted(self, only_trusted):
         # if only_trusted is true, it means that we will only install/update
-        # signed files
-
-        # _override_sigchecks logic is reversed
-        override_sigchecks = not only_trusted
+        # signed files and fail on unsigned ones
 
         if hasattr(self.yumbase, "_override_sigchecks"):
-            # yum >= 3.2.29:
+            # _override_sigchecks logic is reversed
+            override_sigchecks = not only_trusted
+
             self.yumbase._override_sigchecks = override_sigchecks
 
             for repo in self.yumbase.repos.listEnabled():
                 repo._override_sigchecks = override_sigchecks
 
-        else:
-            # yum < 3.2.29:
-            for attrname in ("gpgcheck", "repo_gpgcheck", "localpkg_gpgcheck"):
+        for attrname in ("gpgcheck", "repo_gpgcheck", "localpkg_gpgcheck"):
+            if hasattr(self.yumbase.conf, attrname):
                 setattr(self.yumbase.conf, attrname, only_trusted)
 
-            for attrname in ("gpgcheck", "repo_gpgcheck"):
-                for repo in self.yumbase.repos.listEnabled():
+            for repo in self.yumbase.repos.listEnabled():
+                if hasattr(repo, attrname):
                     setattr(repo, attrname, only_trusted)
 
 
commit 93295b5615fef8d05a9b7249ac61d8018c671bd9
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Mon Mar 12 19:10:32 2012 +0100

    portage: port code to new Layman API and fix usage with newer Portage API

diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py
index aa8f8c4..38e0991 100755
--- a/backends/portage/portageBackend.py
+++ b/backends/portage/portageBackend.py
@@ -64,6 +64,7 @@ import _emerge.actions
 import _emerge.stdout_spinner
 import _emerge.create_depgraph_params
 import _emerge.AtomArg
+from portage.exception import InvalidAtom
 
 # layman imports
 import layman.db
@@ -967,7 +968,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
         for cpv in cpv_list:
             # prevent showing input packages
             if '=' + cpv not in cpv_input:
-                self._package(cpv)
+                try:
+                    self._package(cpv)
+                except InvalidAtom:
+                    continue
 
     def get_details(self, pkgs):
         self.status(STATUS_INFO)
@@ -1043,7 +1047,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
 
         for cp in self._get_all_cp(filters):
             for cpv in self._get_all_cpv(cp, filters):
-                self._package(cpv)
+                try:
+                    self._package(cpv)
+                except InvalidAtom:
+                    continue
 
             cp_processed += 100.0
             self.percentage(int(cp_processed/nb_cp))
@@ -1060,8 +1067,16 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
         self.percentage(None)
 
         # get installed and available dbs
-        installed_layman_db = layman.db.DB(layman.config.Config())
-        available_layman_db = layman.db.RemoteDB(layman.config.Config())
+        if hasattr(layman.config, "Config"):
+            installed_layman_db = layman.db.DB(layman.config.Config())
+        else:
+            installed_layman_db = layman.db.DB(layman.config.BareConfig())
+
+        if hasattr(layman.config, "Config"):
+            available_layman_db = layman.db.RemoteDB(layman.config.Config())
+        else:
+            available_layman_db = layman.db.RemoteDB(layman.config.BareConfig())
+
 
         # 'gentoo' is a dummy repo
         self.repo_detail('gentoo', 'Gentoo Portage tree', True)
@@ -1121,7 +1136,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
         for cpv in cpv_list:
             # prevent showing input packages
             if '=' + cpv not in cpv_input:
-                self._package(cpv)
+                try:
+                    self._package(cpv)
+                except InvalidAtom:
+                    continue
 
     def get_update_detail(self, pkgs):
         # TODO: a lot of informations are missing
@@ -1378,7 +1396,14 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
         myopts = {'--quiet': True}
 
         # get installed and available dbs
-        installed_layman_db = layman.db.DB(layman.config.Config())
+        if hasattr(layman.config, "Config"):
+            layman_opts = {"quiet": True}
+            installed_layman_db = layman.db.DB(layman.config.Config())
+        else:
+            layman_opts = {}
+            conf = layman.config.BareConfig()
+            conf.set_option("quiet", True)
+            installed_layman_db = layman.db.DB(conf)
 
         if force:
             timestamp_path = os.path.join(
@@ -1389,7 +1414,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
         try:
             self._block_output()
             for o in installed_layman_db.overlays.keys():
-                installed_layman_db.sync(o, quiet=True)
+                installed_layman_db.sync(o, **layman_opts)
             _emerge.actions.action_sync(self.pvar.settings, self.pvar.trees,
                     self.pvar.mtimedb, myopts, "")
         except:
@@ -1640,7 +1665,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
 
         self.percentage(100)
 
-    def search_file(self, filters, key):
+    def search_file(self, filters, values):
         # FILTERS:
         # - ~installed is not accepted (error)
         # - free: ok
@@ -1659,24 +1684,28 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend):
         cpv_processed = 0.0
         is_full_path = True
 
-        if key[0] != "/":
-            is_full_path = False
-            key = re.escape(key)
-            searchre = re.compile("/" + key + "$", re.IGNORECASE)
+        count = 0
+        values_len = len(values)
+        for key in values:
 
-        # free filter
-        cpv_list = self._filter_free(cpv_list, filters)
-        nb_cpv = float(len(cpv_list))
+            if key[0] != "/":
+                is_full_path = False
+                key = re.escape(key)
+                searchre = re.compile("/" + key + "$", re.IGNORECASE)
 
-        for cpv in cpv_list:
-            for f in self._get_file_list(cpv):
-                if (is_full_path and key == f) \
-                or (not is_full_path and searchre.search(f)):
-                    self._package(cpv)
-                    break
+            # free filter
+            cpv_list = self._filter_free(cpv_list, filters)
+            nb_cpv = float(len(cpv_list))
+
+            for cpv in cpv_list:
+                for f in self._get_file_list(cpv):
+                    if (is_full_path and key == f) \
+                            or (not is_full_path and searchre.search(f)):
+                        self._package(cpv)
+                        break
 
-            cpv_processed += 100.0
-            self.percentage(int(cpv_processed/nb_cpv))
+            count += 1
+            self.percentage(float(count)/values_len)
 
         self.percentage(100)
 
commit 0aa9f02cb5acf5e9dd225f80401181ad445cfe6f
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Tue Sep 6 12:55:00 2011 +0200

    portage: drop PK_BACKEND_OPTIONS macro usage

diff --git a/backends/portage/pk-backend-portage.c b/backends/portage/pk-backend-portage.c
index 21109a8..ebe8764 100644
--- a/backends/portage/pk-backend-portage.c
+++ b/backends/portage/pk-backend-portage.c
@@ -26,11 +26,11 @@ static PkBackendSpawn *spawn = 0;
 static const gchar* BACKEND_FILE = "portageBackend.py";
 
 /**
- * backend_initialize:
+ * pk_backend_initialize:
  * This should only be run once per backend load, i.e. not every transaction
  */
-static void
-backend_initialize (PkBackend *backend)
+void
+pk_backend_initialize (PkBackend *backend)
 {
 	g_debug ("backend: initialize");
 	spawn = pk_backend_spawn_new ();
@@ -40,21 +40,21 @@ backend_initialize (PkBackend *backend)
 }
 
 /**
- * backend_destroy:
+ * pk_backend_destroy:
  * This should only be run once per backend load, i.e. not every transaction
  */
-static void
-backend_destroy (PkBackend *backend)
+void
+pk_backend_destroy (PkBackend *backend)
 {
 	g_debug ("backend: destroy");
 	g_object_unref (spawn);
 }
 
 /**
- * backend_get_groups:
+ * pk_backend_get_groups:
  */
-static PkBitfield
-backend_get_groups (PkBackend *backend)
+PkBitfield
+pk_backend_get_groups (PkBackend *backend)
 {
 	return pk_bitfield_from_enums (
 			PK_GROUP_ENUM_ACCESSIBILITY,
@@ -96,10 +96,10 @@ backend_get_groups (PkBackend *backend)
 }
 
 /**
- * backend_get_filters:
+ * pk_backend_get_filters:
  */
-static PkBitfield
-backend_get_filters (PkBackend *backend)
+PkBitfield
+pk_backend_get_filters (PkBackend *backend)
 {
 	return pk_bitfield_from_enums (
 			PK_FILTER_ENUM_INSTALLED,
@@ -117,10 +117,10 @@ backend_get_filters (PkBackend *backend)
 }
 
 /**
- * backend_get_roles:
+ * pk_backend_get_roles:
  */
-static PkBitfield
-backend_get_roles (PkBackend *backend)
+PkBitfield
+pk_backend_get_roles (PkBackend *backend)
 {
     PkBitfield roles;
     roles = pk_bitfield_from_enums (
@@ -160,10 +160,10 @@ backend_get_roles (PkBackend *backend)
 }
 
 /**
- * backend_cancel:
+ * pk_backend_cancel:
  */
-static void
-backend_cancel (PkBackend *backend)
+void
+pk_backend_cancel (PkBackend *backend)
 {
 	/* this feels bad... */
 	pk_backend_spawn_kill (spawn);
@@ -172,17 +172,17 @@ backend_cancel (PkBackend *backend)
 /**
  * pk_backend_get_categories:
  */
-static void
-backend_get_categories (PkBackend *backend)
+void
+pk_backend_get_categories (PkBackend *backend)
 {
     pk_backend_spawn_helper (spawn, BACKEND_FILE, "get-categories", NULL);
 }
 
 /**
- * backend_get_depends:
+ * pk_backend_get_depends:
  */
-static void
-backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+void
+pk_backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 {
 	gchar *filters_text;
 	gchar *package_ids_temp;
@@ -195,10 +195,10 @@ backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids
 }
 
 /**
- * backend_get_details:
+ * pk_backend_get_details:
  */
-static void
-backend_get_details (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -208,10 +208,10 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_files:
+ * pk_backend_get_files:
  */
-static void
-backend_get_files (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_files (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -221,10 +221,10 @@ backend_get_files (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_update_detail:
+ * pk_backend_get_update_detail:
  */
-static void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -234,10 +234,10 @@ backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_updates:
+ * pk_backend_get_updates:
  */
-static void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 
@@ -247,10 +247,10 @@ backend_get_updates (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_install_packages:
+ * pk_backend_install_packages:
  */
-static void
-backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -268,10 +268,10 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
 }
 
 /**
- * backend_refresh_cache:
+ * pk_backend_refresh_cache:
  */
-static void
-backend_refresh_cache (PkBackend *backend, gboolean force)
+void
+pk_backend_refresh_cache (PkBackend *backend, gboolean force)
 { 
 	/* check network state */
 	if (!pk_backend_is_online (backend)) {
@@ -284,10 +284,10 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
 }
 
 /**
- * backend_remove_packages:
+ * pk_backend_remove_packages:
  */
-static void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
+void
+pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
 {
 	gchar *package_ids_temp;
 
@@ -299,8 +299,8 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
 /**
  * pk_backend_repo_enable:
  */
-static void
-backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
+void
+pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 {
 	pk_backend_spawn_helper (spawn, BACKEND_FILE, "repo-enable", rid, pk_backend_bool_to_string (enabled), NULL);
 }
@@ -308,8 +308,8 @@ backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 /**
  * pk_backend_resolve:
  */
-static void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
+void
+pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 {
 	gchar *filters_text;
 	gchar *package_ids_temp;
@@ -324,8 +324,8 @@ backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 /**
  * pk_backend_search_details:
  */
-static void
-backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -339,8 +339,8 @@ backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 /**
  * backend_search_files:
  */
-static void
-backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -354,8 +354,8 @@ backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 /**
  * pk_backend_search_groups:
  */
-static void
-backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 { 
 	gchar *filters_text;
 	gchar *search;
@@ -367,10 +367,10 @@ backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_search_names:
+ * pk_backend_search_names:
  */
-static void
-backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -382,10 +382,10 @@ backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_update_packages:
+ * pk_backend_update_packages:
  */
-static void
-backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -396,10 +396,10 @@ backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **pack
 }
 
 /**
- * backend_get_packages:
+ * pk_backend_get_packages:
  */
-static void
-backend_get_packages (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 
@@ -411,8 +411,8 @@ backend_get_packages (PkBackend *backend, PkBitfield filters)
 /**
  * pk_backend_get_repo_list:
  */
-static void
-backend_get_repo_list (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 
@@ -422,10 +422,10 @@ backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_get_requires:
+ * pk_backend_get_requires:
  */
-static void
-backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+void
+pk_backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 { 
 	gchar *package_ids_temp;
 	gchar *filters_text;
@@ -438,19 +438,19 @@ backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_id
 }
 
 /**
- * backend_update_system:
+ * pk_backend_update_system:
  */
-static void
-backend_update_system (PkBackend *backend, gboolean only_trusted)
+void
+pk_backend_update_system (PkBackend *backend, gboolean only_trusted)
 {
 	pk_backend_spawn_helper (spawn, BACKEND_FILE, "update-system", pk_backend_bool_to_string (only_trusted), NULL);
 }
 
 /**
- * backend_simulate_remove_packages:
+ * pk_backend_simulate_remove_packages:
  */
-static void
-backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
+void
+pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
 {
     gchar *package_ids_temp;
 
@@ -461,10 +461,10 @@ backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gbool
 }
 
 /**
- * backend_simulate_update_packages:
+ * pk_backend_simulate_update_packages:
  */
-static void
-backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 {
     gchar *package_ids_temp;
 
@@ -475,10 +475,10 @@ backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_simulate_install_packages:
+ * pk_backend_simulate_install_packages:
  */
-static void
-backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 {
     gchar *package_ids_temp;
 
@@ -488,50 +488,20 @@ backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
     g_free (package_ids_temp);
 }
 
-/* FIXME: port this away from PK_BACKEND_OPTIONS */
-PK_BACKEND_OPTIONS (
-	"Portage",				/* description */
-	"Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>, Fabio Erculiani <lxnay at sabayon.org>",	/* author */
-	backend_initialize,			/* initalize */
-	backend_destroy,			/* destroy */
-	backend_get_groups,			/* get_groups */
-	backend_get_filters,			/* get_filters */
-	backend_get_roles,					/* get_roles */
-	NULL,					/* get_mime_types */
-	backend_cancel,				/* cancel */
-	NULL,					/* download_packages */
-	backend_get_categories,			/* get_categories */
-	backend_get_depends,			/* get_depends */
-	backend_get_details,			/* get_details */
-	NULL,					/* get_distro_upgrades */
-	backend_get_files,			/* get_files */
-	backend_get_packages,			/* get_packages */
-	backend_get_repo_list,			/* get_repo_list */
-	backend_get_requires,			/* get_requires */
-	backend_get_update_detail,		/* get_update_detail */
-	backend_get_updates,			/* get_updates */
-	NULL,					/* install_files */
-	backend_install_packages,		/* install_packages */
-	NULL,					/* install_signature */
-	backend_refresh_cache,			/* refresh_cache */
-	backend_remove_packages,		/* remove_packages */
-	backend_repo_enable,			/* repo_enable */
-	NULL,					/* repo_set_data */
-	backend_resolve,			/* resolve */
-	NULL,					/* rollback */
-	backend_search_details,			/* search_details */
-	backend_search_files,			/* search_file */
-	backend_search_groups,			/* search_group */
-	backend_search_names,			/* search_name */
-	backend_update_packages,		/* update_packages */
-	backend_update_system,			/* update_system */
-	NULL,					/* what_provides */
-	NULL,					/* simulate_install_files */
-    backend_simulate_install_packages,  /* simulate_install_packages */
-    backend_simulate_remove_packages,   /* simulate_remove_packages */
-    backend_simulate_update_packages,   /* simulate_update_packages */
-	NULL,					/* upgrade_system */
-	NULL,					/* transaction_start */
-	NULL					/* transaction_stop */
-);
+/**
+ * pk_backend_get_description:
+ */
+gchar *
+pk_backend_get_description (PkBackend *backend)
+{
+    return g_strdup ("Portage");
+}
 
+/**
+ * pk_backend_get_author:
+ */
+gchar *
+pk_backend_get_author (PkBackend *backend)
+{
+    return g_strdup ("Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>, Fabio Erculiani <lxnay at sabayon.org>");
+}
commit f5aaac343c69eb12d293f2fef6d9be037b40d04a
Author: Fabio Erculiani <lxnay at sabayon.org>
Date:   Tue Sep 6 12:57:15 2011 +0200

    entropy: drop PK_BACKEND_OPTIONS macro usage

diff --git a/backends/entropy/pk-backend-entropy.c b/backends/entropy/pk-backend-entropy.c
index cee6c65..4d47a74 100644
--- a/backends/entropy/pk-backend-entropy.c
+++ b/backends/entropy/pk-backend-entropy.c
@@ -26,11 +26,11 @@ static PkBackendSpawn *spawn = 0;
 static const gchar* BACKEND_FILE = "entropyBackend.py";
 
 /**
- * backend_initialize:
+ * pk_backend_initialize:
  * This should only be run once per backend load, i.e. not every transaction
  */
-static void
-backend_initialize (PkBackend *backend)
+void
+pk_backend_initialize (PkBackend *backend)
 {
 	g_debug ("backend: initialize");
 	spawn = pk_backend_spawn_new ();
@@ -40,21 +40,21 @@ backend_initialize (PkBackend *backend)
 }
 
 /**
- * backend_destroy:
+ * pk_backend_destroy:
  * This should only be run once per backend load, i.e. not every transaction
  */
-static void
-backend_destroy (PkBackend *backend)
+void
+pk_backend_destroy (PkBackend *backend)
 {
 	g_debug ("backend: destroy");
 	g_object_unref (spawn);
 }
 
 /**
- * backend_get_groups:
+ * pk_backend_get_groups:
  */
-static PkBitfield
-backend_get_groups (PkBackend *backend)
+PkBitfield
+pk_backend_get_groups (PkBackend *backend)
 {
 	return pk_bitfield_from_enums (
 			PK_GROUP_ENUM_ACCESSIBILITY,
@@ -96,10 +96,10 @@ backend_get_groups (PkBackend *backend)
 }
 
 /**
- * backend_get_filters:
+ * pk_backend_get_filters:
  */
-static PkBitfield
-backend_get_filters (PkBackend *backend)
+PkBitfield
+pk_backend_get_filters (PkBackend *backend)
 {
 	return pk_bitfield_from_enums (
 			PK_FILTER_ENUM_INSTALLED,
@@ -117,10 +117,10 @@ backend_get_filters (PkBackend *backend)
 }
 
 /**
- * backend_get_roles:
+ * pk_backend_get_roles:
  */
-static PkBitfield
-backend_get_roles (PkBackend *backend)
+PkBitfield
+pk_backend_get_roles (PkBackend *backend)
 {
 	PkBitfield roles;
 	roles = pk_bitfield_from_enums (
@@ -160,29 +160,29 @@ backend_get_roles (PkBackend *backend)
 }
 
 /**
- * backend_get_mime_types:
+ * pk_backend_get_mime_types:
  */
-static gchar *
-backend_get_mime_types (PkBackend *backend)
+gchar *
+pk_backend_get_mime_types (PkBackend *backend)
 {
     return g_strdup ("application/entropy-package;application/entropy-webinstall");
 }
 
 /**
- * backend_cancel:
+ * pk_backend_cancel:
  */
-static void
-backend_cancel (PkBackend *backend)
+void
+pk_backend_cancel (PkBackend *backend)
 {
 	/* this feels bad... */
 	pk_backend_spawn_kill (spawn);
 }
 
 /**
- * backend_download_packages:
+ * pk_backend_download_packages:
  */
-static void
-backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
+void
+pk_backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
 {
 	gchar *package_ids_temp;
 
@@ -193,10 +193,10 @@ backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar
 }
 
 /**
- * backend_what_provides:
+ * pk_backend_what_provides:
  */
-static void
-backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, const gchar *search)
+void
+pk_backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **search)
 {
 	gchar *filters_text;
 	const gchar *provides_text;
@@ -209,17 +209,17 @@ backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum pr
 /**
  * pk_backend_get_categories:
  */
-static void
-backend_get_categories (PkBackend *backend)
+void
+pk_backend_get_categories (PkBackend *backend)
 {
 	pk_backend_spawn_helper (spawn, BACKEND_FILE, "get-categories", NULL);
 }
 
 /**
- * backend_get_depends:
+ * pk_backend_get_depends:
  */
-static void
-backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+void
+pk_backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 {
 	gchar *filters_text;
 	gchar *package_ids_temp;
@@ -232,10 +232,10 @@ backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids
 }
 
 /**
- * backend_get_details:
+ * pk_backend_get_details:
  */
-static void
-backend_get_details (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_details (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -245,19 +245,19 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_distro_upgrades:
+ * pk_backend_get_distro_upgrades:
  */
-static void
-backend_get_distro_upgrades (PkBackend *backend)
+void
+pk_backend_get_distro_upgrades (PkBackend *backend)
 {
 	pk_backend_spawn_helper (spawn, BACKEND_FILE, "get-distro-upgrades", NULL);
 }
 
 /**
- * backend_get_files:
+ * pk_backend_get_files:
  */
-static void
-backend_get_files (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_files (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -267,10 +267,10 @@ backend_get_files (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_update_detail:
+ * pk_backend_get_update_detail:
  */
-static void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -280,10 +280,10 @@ backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_get_updates:
+ * pk_backend_get_updates:
  */
-static void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_updates (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 
@@ -293,10 +293,10 @@ backend_get_updates (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_install_packages:
+ * pk_backend_install_packages:
  */
-static void
-backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -307,10 +307,10 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
 }
 
 /**
- * backend_install_files:
+ * pk_backend_install_files:
  */
-static void
-backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
+void
+pk_backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_paths)
 {
     gchar *package_ids_temp;
 
@@ -321,10 +321,10 @@ backend_install_files (PkBackend *backend, gboolean only_trusted, gchar **full_p
 }
 
 /**
- * backend_refresh_cache:
+ * pk_backend_refresh_cache:
  */
-static void
-backend_refresh_cache (PkBackend *backend, gboolean force)
+void
+pk_backend_refresh_cache (PkBackend *backend, gboolean force)
 { 
 	/* check network state */
 	if (!pk_backend_is_online (backend)) {
@@ -337,10 +337,10 @@ backend_refresh_cache (PkBackend *backend, gboolean force)
 }
 
 /**
- * backend_remove_packages:
+ * pk_backend_remove_packages:
  */
-static void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
+void
+pk_backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
 {
 	gchar *package_ids_temp;
 
@@ -352,8 +352,8 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
 /**
  * pk_backend_repo_enable:
  */
-static void
-backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
+void
+pk_backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 {
 	pk_backend_spawn_helper (spawn, BACKEND_FILE, "repo-enable", rid, pk_backend_bool_to_string (enabled), NULL);
 }
@@ -361,8 +361,8 @@ backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 /**
  * pk_backend_resolve:
  */
-static void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
+void
+pk_backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 {
 	gchar *filters_text;
 	gchar *package_ids_temp;
@@ -377,8 +377,8 @@ backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 /**
  * pk_backend_search_details:
  */
-static void
-backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -390,10 +390,10 @@ backend_search_details (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_search_files:
+ * pk_backend_search_files:
  */
-static void
-backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -407,8 +407,8 @@ backend_search_files (PkBackend *backend, PkBitfield filters, gchar **values)
 /**
  * pk_backend_search_groups:
  */
-static void
-backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 { 
 	gchar *filters_text;
 	gchar *search;
@@ -420,10 +420,10 @@ backend_search_groups (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_search_names:
+ * pk_backend_search_names:
  */
-static void
-backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
+void
+pk_backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 {
 	gchar *filters_text;
 	gchar *search;
@@ -435,10 +435,10 @@ backend_search_names (PkBackend *backend, PkBitfield filters, gchar **values)
 }
 
 /**
- * backend_update_packages:
+ * pk_backend_update_packages:
  */
-static void
-backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
+void
+pk_backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
 {
 	gchar *package_ids_temp;
 
@@ -449,10 +449,10 @@ backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **pack
 }
 
 /**
- * backend_get_packages:
+ * pk_backend_get_packages:
  */
-static void
-backend_get_packages (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_packages (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 
@@ -464,8 +464,8 @@ backend_get_packages (PkBackend *backend, PkBitfield filters)
 /**
  * pk_backend_get_repo_list:
  */
-static void
-backend_get_repo_list (PkBackend *backend, PkBitfield filters)
+void
+pk_backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
 	gchar *filters_text;
 
@@ -475,10 +475,10 @@ backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 }
 
 /**
- * backend_get_requires:
+ * pk_backend_get_requires:
  */
-static void
-backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+void
+pk_backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 { 
 	gchar *package_ids_temp;
 	gchar *filters_text;
@@ -491,19 +491,19 @@ backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_id
 }
 
 /**
- * backend_update_system:
+ * pk_backend_update_system:
  */
-static void
-backend_update_system (PkBackend *backend, gboolean only_trusted)
+void
+pk_backend_update_system (PkBackend *backend, gboolean only_trusted)
 {
 	pk_backend_spawn_helper (spawn, BACKEND_FILE, "update-system", pk_backend_bool_to_string (only_trusted), NULL);
 }
 
 /**
- * backend_simulate_remove_packages:
+ * pk_backend_simulate_remove_packages:
  */
-static void
-backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
+void
+pk_backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gboolean autoremove)
 {
     gchar *package_ids_temp;
 
@@ -514,10 +514,10 @@ backend_simulate_remove_packages (PkBackend *backend, gchar **package_ids, gbool
 }
 
 /**
- * backend_simulate_update_packages:
+ * pk_backend_simulate_update_packages:
  */
-static void
-backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 {
     gchar *package_ids_temp;
 
@@ -528,10 +528,10 @@ backend_simulate_update_packages (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_simulate_install_packages:
+ * pk_backend_simulate_install_packages:
  */
-static void
-backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
+void
+pk_backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 {
     gchar *package_ids_temp;
 
@@ -542,10 +542,10 @@ backend_simulate_install_packages (PkBackend *backend, gchar **package_ids)
 }
 
 /**
- * backend_simulate_install_files:
+ * pk_backend_simulate_install_files:
  */
-static void
-backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
+void
+pk_backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
 {
     gchar *package_ids_temp;
 
@@ -555,50 +555,20 @@ backend_simulate_install_files (PkBackend *backend, gchar **full_paths)
     g_free (package_ids_temp);
 }
 
-/* FIXME: port this away from PK_BACKEND_OPTIONS */
-PK_BACKEND_OPTIONS (
-	"Entropy",				/* description */
-	"Fabio Erculiani (lxnay) <lxnay at sabayon.org>",	/* author */
-	backend_initialize,					/* initalize */
-	backend_destroy,					/* destroy */
-	backend_get_groups,					/* get_groups */
-	backend_get_filters,				/* get_filters */
-	backend_get_roles,					/* get_roles */
-	backend_get_mime_types,				/* get_mime_types */
-	backend_cancel,						/* cancel */
-	backend_download_packages,			/* download_packages */
-	backend_get_categories,				/* get_categories */
-	backend_get_depends,				/* get_depends */
-	backend_get_details,				/* get_details */
-	backend_get_distro_upgrades,		/* get_distro_upgrades */
-	backend_get_files,					/* get_files */
-	backend_get_packages,				/* get_packages */
-	backend_get_repo_list,				/* get_repo_list */
-	backend_get_requires,				/* get_requires */
-	backend_get_update_detail,			/* get_update_detail */
-	backend_get_updates,				/* get_updates */
-	backend_install_files,				/* install_files */
-	backend_install_packages,			/* install_packages */
-	NULL,								/* install_signature */
-	backend_refresh_cache,				/* refresh_cache */
-	backend_remove_packages,			/* remove_packages */
-	backend_repo_enable,				/* repo_enable */
-	NULL,								/* repo_set_data */
-	backend_resolve,					/* resolve */
-	NULL,								/* rollback */
-	backend_search_details,				/* search_details */
-	backend_search_files,				/* search_file */
-	backend_search_groups,				/* search_group */
-	backend_search_names,				/* search_name */
-	backend_update_packages,			/* update_packages */
-	backend_update_system,				/* update_system */
-	backend_what_provides,				/* what_provides */
-	backend_simulate_install_files,	    /* simulate_install_files */
-	backend_simulate_install_packages,  /* simulate_install_packages */
-	backend_simulate_remove_packages,   /* simulate_remove_packages */
-	backend_simulate_update_packages,   /* simulate_update_packages */
-	NULL,						/* upgrade_system */
-	NULL,					/* transaction_start */
-	NULL					/* transaction_stop */
-);
+/**
+ * pk_backend_get_description:
+ */
+gchar *
+pk_backend_get_description (PkBackend *backend)
+{
+    return g_strdup ("Entropy");
+}
 
+/**
+ * pk_backend_get_author:
+ */
+gchar *
+pk_backend_get_author (PkBackend *backend)
+{
+    return g_strdup ("Fabio Erculiani (lxnay) <lxnay at sabayon.org>");
+}
commit 39524b0b374f8c86066f0c7e79d8ea02fd31397e
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Mon Feb 6 14:09:11 2012 +1300

    alpm: trivial: fix minor memory issues

diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index d62b927..c8fd13b 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -752,6 +752,7 @@ pk_backend_config_initialize_alpm (PkBackendConfig *config, GError **error)
 	g_return_val_if_fail (config != NULL, FALSE);
 
 	if (config->root == NULL || *config->root == '\0') {
+		g_free (config->root);
 		config->root = g_strdup (PK_BACKEND_DEFAULT_ROOT);
 	} else if (!g_str_has_suffix (config->root, G_DIR_SEPARATOR_S)) {
 		dir = 0;
diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
index 2d057aa..c90cd7d 100644
--- a/backends/alpm/pk-backend-packages.c
+++ b/backends/alpm/pk-backend-packages.c
@@ -270,15 +270,17 @@ pk_backend_get_details_thread (PkBackend *self)
 			break;
 		}
 
-		licenses = g_string_new ("");
 		i = alpm_pkg_get_licenses (pkg);
-		for (; i != NULL; i = i->next) {
-			/* assume OR although it may not be correct */
-			g_string_append_printf (licenses, " or %s",
-						(const gchar *) i->data);
-		}
-		if (licenses->len == 0) {
-			g_string_append (licenses, " or Unknown");
+		if (i == NULL) {
+			licenses = g_string_new ("Unknown");
+		} else {
+			licenses = g_string_new ((const gchar *) i->data);
+			while ((i = i->next) != NULL) {
+				const gchar *license = (const gchar *) i->data;
+				/* assume OR although it may not be correct */
+				g_string_append_printf (licenses, " or %s",
+							license);
+			}
 		}
 
 		group = pk_group_enum_from_string (alpm_pkg_get_group (pkg));
@@ -291,7 +293,7 @@ pk_backend_get_details_thread (PkBackend *self)
 			size = alpm_pkg_download_size (pkg);
 		}
 
-		pk_backend_details (self, *packages, licenses->str + 4, group,
+		pk_backend_details (self, *packages, licenses->str, group,
 				    desc, url, size);
 		g_string_free (licenses, TRUE);
 	}
@@ -345,10 +347,11 @@ pk_backend_get_files_thread (PkBackend *self)
 		filelist = alpm_pkg_get_files (pkg);
 		for (i = 0; i < filelist->count; ++i) {
 			const gchar *file = filelist->files[i].name;
-			g_string_append_printf (files, ";%s%s", root, file);
+			g_string_append_printf (files, "%s%s;", root, file);
 		}
 
-		pk_backend_files (self, *packages, files->str + 1);
+		g_string_truncate (files, MAX (files->len, 1) - 1);
+		pk_backend_files (self, *packages, files->str);
 		g_string_free (files, TRUE);
 	}
 
commit 1a44d2e0b493b334d9720d0b0e4ff3963a7f9dc3
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sun Jan 22 15:54:42 2012 +1300

    alpm: allow forced install of untrusted packages

diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index ac530c7..a123297 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -132,7 +132,8 @@ disabled_repos_free (GHashTable *table)
 }
 
 static gboolean
-disabled_repos_configure (GHashTable *table, GError **error)
+disabled_repos_configure (GHashTable *table, gboolean only_trusted,
+			  GError **error)
 {
 	const alpm_list_t *i;
 
@@ -148,14 +149,19 @@ disabled_repos_configure (GHashTable *table, GError **error)
 
 	for (i = configured; i != NULL; i = i->next) {
 		PkBackendRepo *repo = (PkBackendRepo *) i->data;
+		alpm_siglevel_t level = repo->level;
 		alpm_db_t *db;
 
 		if (g_hash_table_lookup (table, repo->name) != NULL) {
 			/* repo is disabled */
 			continue;
+		} else if (!only_trusted) {
+			level &= ~ALPM_SIG_PACKAGE;
+			level &= ~ALPM_SIG_DATABASE;
+			level &= ~ALPM_SIG_USE_DEFAULT;
 		}
 
-		db = alpm_db_register_sync (alpm, repo->name, repo->level);
+		db = alpm_db_register_sync (alpm, repo->name, level);
 		if (db == NULL) {
 			enum _alpm_errno_t errno = alpm_errno (alpm);
 			g_set_error (error, ALPM_ERROR, errno, "[%s]: %s",
@@ -186,7 +192,7 @@ pk_backend_configure_repos (alpm_list_t *repos, GHashTable *servers,
 
 		value = g_hash_table_lookup (levels, i->data);
 		if (value != NULL) {
-			repo->level = *(alpm_siglevel_t *)value;
+			repo->level = *(alpm_siglevel_t *) value;
 		} else {
 			repo->level = ALPM_SIG_USE_DEFAULT;
 		}
@@ -196,6 +202,22 @@ pk_backend_configure_repos (alpm_list_t *repos, GHashTable *servers,
 }
 
 gboolean
+pk_backend_disable_signatures (PkBackend *self, GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	return disabled_repos_configure (disabled, FALSE, error);
+}
+
+gboolean
+pk_backend_enable_signatures (PkBackend *self, GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	return disabled_repos_configure (disabled, TRUE, error);
+}
+
+gboolean
 pk_backend_initialize_databases (PkBackend *self, GError **error)
 {
 	g_return_val_if_fail (self != NULL, FALSE);
@@ -205,7 +227,7 @@ pk_backend_initialize_databases (PkBackend *self, GError **error)
 		return FALSE;
 	}
 
-	if (!disabled_repos_configure (disabled, error)) {
+	if (!disabled_repos_configure (disabled, TRUE, error)) {
 		return FALSE;
 	}
 
@@ -312,7 +334,7 @@ pk_backend_repo_enable_thread (PkBackend *self)
 
 	if (g_hash_table_remove (disabled, repo)) {
 		/* reload configuration to preserve ordering */
-		if (disabled_repos_configure (disabled, &error)) {
+		if (disabled_repos_configure (disabled, TRUE, &error)) {
 			pk_backend_repo_list_changed (self);
 		}
 	} else {
diff --git a/backends/alpm/pk-backend-databases.h b/backends/alpm/pk-backend-databases.h
index 2636cae..d9b9e78 100644
--- a/backends/alpm/pk-backend-databases.h
+++ b/backends/alpm/pk-backend-databases.h
@@ -28,6 +28,12 @@ void		 pk_backend_configure_repos		(alpm_list_t *repos,
 							 GHashTable *servers,
 							 GHashTable *levels);
 
+gboolean	 pk_backend_disable_signatures		(PkBackend *self,
+							 GError **error);
+
+gboolean	 pk_backend_enable_signatures		(PkBackend *self,
+							 GError **error);
+
 gboolean	 pk_backend_initialize_databases	(PkBackend *self,
 							 GError **error);
 
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
index 5b5e2b2..d0cbca2 100644
--- a/backends/alpm/pk-backend-install.c
+++ b/backends/alpm/pk-backend-install.c
@@ -25,6 +25,7 @@
 #include <pk-backend.h>
 
 #include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-install.h"
 #include "pk-backend-transaction.h"
@@ -94,17 +95,32 @@ pk_backend_simulate_install_files_thread (PkBackend *self)
 static gboolean
 pk_backend_install_files_thread (PkBackend *self)
 {
+	gboolean only_trusted;
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
 
+	only_trusted = pk_backend_get_bool (self, "only_trusted");
+
+	if (!only_trusted && !pk_backend_disable_signatures (self, &error)) {
+		goto out;
+	}
+
 	if (pk_backend_transaction_initialize (self, 0, &error) &&
 	    pk_backend_transaction_add_targets (self, &error) &&
 	    pk_backend_transaction_simulate (self, &error)) {
 		pk_backend_transaction_commit (self, &error);
 	}
 
-	return pk_backend_transaction_finish (self, error);
+out:
+	pk_backend_transaction_end (self, (error == NULL) ? &error : NULL);
+
+	if (!only_trusted) {
+		GError **e = (error == NULL) ? &error : NULL;
+		pk_backend_enable_signatures (self, e);
+	}
+
+	return pk_backend_finish (self, error);
 }
 
 void
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index c770159..d2f363b 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -26,6 +26,7 @@
 #include <string.h>
 
 #include "pk-backend-alpm.h"
+#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-sync.h"
 #include "pk-backend-transaction.h"
@@ -150,17 +151,31 @@ pk_backend_simulate_install_packages_thread (PkBackend *self)
 static gboolean
 pk_backend_install_packages_thread (PkBackend *self)
 {
+	gboolean only_trusted;
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
 
+	only_trusted = pk_backend_get_bool (self, "only_trusted");
+
+	if (!only_trusted && !pk_backend_disable_signatures (self, &error)) {
+		goto out;
+	}
+
 	if (pk_backend_transaction_initialize (self, 0, &error) &&
 	    pk_backend_transaction_sync_targets (self, &error) &&
 	    pk_backend_transaction_simulate (self, &error)) {
 		pk_backend_transaction_commit (self, &error);
 	}
 
-	return pk_backend_transaction_finish (self, error);
+	pk_backend_transaction_end (self, (error == NULL) ? &error : NULL);
+out:
+	if (!only_trusted) {
+		GError **e = (error == NULL) ? &error : NULL;
+		pk_backend_enable_signatures (self, e);
+	}
+
+	return pk_backend_finish (self, error);
 }
 
 void
@@ -215,6 +230,7 @@ pk_backend_replaces_dependencies (PkBackend *self, alpm_pkg_t *pkg)
 static gboolean
 pk_backend_update_packages_thread (PkBackend *self)
 {
+	gboolean only_trusted;
 	const alpm_list_t *i;
 	alpm_list_t *asdeps = NULL;
 	GError *error = NULL;
@@ -223,6 +239,12 @@ pk_backend_update_packages_thread (PkBackend *self)
 	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
 
+	only_trusted = pk_backend_get_bool (self, "only_trusted");
+
+	if (!only_trusted && !pk_backend_disable_signatures (self, &error)) {
+		goto out;
+	}
+
 	if (!pk_backend_transaction_initialize (self, 0, &error) ||
 	    !pk_backend_transaction_sync_targets (self, &error) ||
 	    !pk_backend_transaction_simulate (self, &error)) {
@@ -256,10 +278,17 @@ pk_backend_update_packages_thread (PkBackend *self)
 	}
 
 out:
+	pk_backend_transaction_end (self, (error == NULL) ? &error : NULL);
+
+	if (!only_trusted) {
+		GError **e = (error == NULL) ? &error : NULL;
+		pk_backend_enable_signatures (self, e);
+	}
+
 	alpm_list_free_inner (asdeps, g_free);
 	alpm_list_free (asdeps);
 
-	return pk_backend_transaction_finish (self, error);
+	return pk_backend_finish (self, error);
 }
 
 void
commit 521ca65e075c831f91cf6f20c466d7b497394dfd
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sun Jan 22 14:44:14 2012 +1300

    alpm: trivial: fix SigLevel option parsing

diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index a51a984..d62b927 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -524,14 +524,14 @@ pk_backend_config_set_siglevel (PkBackendConfig *config, const gchar *section,
 		}
 
 		/* this also allows e.g. NeverEver, so put prefixes last */
-		if (g_str_has_prefix (list, "Never") == 0) {
+		if (g_str_has_prefix (list, "Never")) {
 			if (package) {
 				*level &= ~ALPM_SIG_PACKAGE;
 			}
 			if (database) {
 				*level &= ~ALPM_SIG_DATABASE;
 			}
-		} else if (g_str_has_prefix (list, "Optional") == 0) {
+		} else if (g_str_has_prefix (list, "Optional")) {
 			if (package) {
 				*level |= ALPM_SIG_PACKAGE;
 				*level |= ALPM_SIG_PACKAGE_OPTIONAL;
@@ -540,7 +540,7 @@ pk_backend_config_set_siglevel (PkBackendConfig *config, const gchar *section,
 				*level |= ALPM_SIG_DATABASE;
 				*level |= ALPM_SIG_DATABASE_OPTIONAL;
 			}
-		} else if (g_str_has_prefix (list, "Required") == 0) {
+		} else if (g_str_has_prefix (list, "Required")) {
 			if (package) {
 				*level |= ALPM_SIG_PACKAGE;
 				*level &= ~ALPM_SIG_PACKAGE_OPTIONAL;
@@ -549,7 +549,7 @@ pk_backend_config_set_siglevel (PkBackendConfig *config, const gchar *section,
 				*level |= ALPM_SIG_DATABASE;
 				*level &= ~ALPM_SIG_DATABASE_OPTIONAL;
 			}
-		} else if (g_str_has_prefix (list, "TrustedOnly") == 0) {
+		} else if (g_str_has_prefix (list, "TrustedOnly")) {
 			if (package) {
 				*level &= ~ALPM_SIG_PACKAGE_MARGINAL_OK;
 				*level &= ~ALPM_SIG_PACKAGE_UNKNOWN_OK;
@@ -558,7 +558,7 @@ pk_backend_config_set_siglevel (PkBackendConfig *config, const gchar *section,
 				*level &= ~ALPM_SIG_DATABASE_MARGINAL_OK;
 				*level &= ~ALPM_SIG_DATABASE_UNKNOWN_OK;
 			}
-		} else if (g_str_has_prefix (list, "TrustAll") == 0) {
+		} else if (g_str_has_prefix (list, "TrustAll")) {
 			if (package) {
 				*level |= ALPM_SIG_PACKAGE_MARGINAL_OK;
 				*level |= ALPM_SIG_PACKAGE_UNKNOWN_OK;
commit aad0230ebb2e721afa7fb1a7b2c284a3db365eb9
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Tue Jan 17 12:17:25 2012 +1300

    alpm: fix locale and proxy support

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 417714c..5c6b629 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -22,8 +22,10 @@
  */
 
 #include <config.h>
+#include <locale.h>
 #include <glib/gstdio.h>
 #include <sys/utsname.h>
+#include <pk-backend-spawn.h>
 
 #include "pk-backend-alpm.h"
 #include "pk-backend-config.h"
@@ -196,23 +198,83 @@ pk_backend_logcb (alpm_loglevel_t level, const gchar *format, va_list args)
 	g_free (output);
 }
 
-static gboolean
-pk_backend_initialize_alpm (PkBackend *self, GError **error)
+static void
+pk_backend_configure_environment (PkBackend *self)
 {
 	struct utsname un;
-	gchar *user_agent;
+	gchar *value;
 
-	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_if_fail (self != NULL);
 
 	/* PATH might have been nuked by D-Bus */
 	g_setenv ("PATH", PK_BACKEND_DEFAULT_PATH, FALSE);
 
 	uname (&un);
-	user_agent = g_strdup_printf ("%s/%s (%s %s) libalpm/%s",
-				      PACKAGE_TARNAME, PACKAGE_VERSION,
-				      un.sysname, un.machine, alpm_version ());
-	g_setenv ("HTTP_USER_AGENT", user_agent, FALSE);
-	g_free (user_agent);
+	value = g_strdup_printf ("%s/%s (%s %s) libalpm/%s", PACKAGE_TARNAME,
+				 PACKAGE_VERSION, un.sysname, un.machine,
+				 alpm_version ());
+	g_setenv ("HTTP_USER_AGENT", value, FALSE);
+	g_free (value);
+
+	value = pk_backend_get_locale (self);
+	if (value != NULL) {
+		setlocale (LC_ALL, value);
+		g_free (value);
+	}
+
+	value = pk_backend_get_proxy_http (self);
+	if (value != NULL) {
+		gchar *uri = pk_backend_spawn_convert_uri (value);
+		g_setenv ("http_proxy", uri, TRUE);
+		g_free (uri);
+		g_free (value);
+	}
+
+	value = pk_backend_get_proxy_https (self);
+	if (value != NULL) {
+		gchar *uri = pk_backend_spawn_convert_uri (value);
+		g_setenv ("https_proxy", uri, TRUE);
+		g_free (uri);
+		g_free (value);
+	}
+
+	value = pk_backend_get_proxy_ftp (self);
+	if (value != NULL) {
+		gchar *uri = pk_backend_spawn_convert_uri (value);
+		g_setenv ("ftp_proxy", uri, TRUE);
+		g_free (uri);
+		g_free (value);
+	}
+
+	value = pk_backend_get_proxy_socks (self);
+	if (value != NULL) {
+		gchar *uri = pk_backend_spawn_convert_uri (value);
+		g_setenv ("socks_proxy", uri, TRUE);
+		g_free (uri);
+		g_free (value);
+	}
+
+	value = pk_backend_get_no_proxy (self);
+	if (value != NULL) {
+		g_setenv ("no_proxy", value, TRUE);
+		g_free (value);
+	}
+
+	value = pk_backend_get_pac (self);
+	if (value != NULL) {
+		gchar *uri = pk_backend_spawn_convert_uri (value);
+		g_setenv ("pac", uri, TRUE);
+		g_free (uri);
+		g_free (value);
+	}
+}
+
+static gboolean
+pk_backend_initialize_alpm (PkBackend *self, GError **error)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	pk_backend_configure_environment (self);
 
 	alpm = pk_backend_configure (PK_BACKEND_CONFIG_FILE, error);
 	if (alpm == NULL) {
@@ -380,3 +442,11 @@ pk_backend_finish (PkBackend *self, GError *error)
 	pk_backend_thread_finished (self);
 	return (error == NULL);
 }
+
+void
+pk_backend_transaction_start (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_configure_environment (self);
+}
commit 2b7f3483336613a8ce83344ebe2ce487c327c48b
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Tue Jan 17 12:02:52 2012 +1300

    alpm: fix freedesktop.org bug #44713

diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index f812766..76402f0 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -284,8 +284,8 @@ pk_backend_install_ignorepkg (PkBackend *self, alpm_pkg_t *pkg, gint *result)
 }
 
 static void
-pk_backend_select_provider (PkBackend *self, alpm_depend_t *depend,
-			    const alpm_list_t *providers)
+pk_backend_select_provider (PkBackend *self, const alpm_list_t *providers,
+		            alpm_depend_t *depend)
 {
 	gchar *output;
 
commit c80c749d87b15a6dc79cf780466bb54f1129954f
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Tue Nov 1 00:47:12 2011 +1300

    alpm: trivial: fix compile warning

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 8ecc7dd..417714c 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -238,7 +238,7 @@ pk_backend_destroy_alpm (PkBackend *self)
 	g_return_if_fail (self != NULL);
 
 	if (alpm != NULL) {
-		if (alpm_trans_get_flags (alpm) != -1) {
+		if (alpm_trans_get_flags (alpm) < 0) {
 			alpm_trans_release (alpm);
 		}
 		alpm_release (alpm);
commit 165b9aca5e4b218bacffdf1a272e234861df3909
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sun Oct 30 02:42:34 2011 +1300

    alpm: remove ShowSize option, add VerbosePkgLists

diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index acaa022..a51a984 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -33,8 +33,8 @@
 
 typedef struct
 {
-	 gboolean	 checkspace, ilovecandy, showsize, totaldl, usedelta,
-			 usesyslog;
+	 gboolean	 checkspace, ilovecandy, totaldl, usedelta, usesyslog,
+			 verbosepkglists;
 
 	 gchar		*arch, *cleanmethod, *dbpath, *gpgdir, *logfile, *root,
 			*xfercmd;
@@ -131,14 +131,6 @@ pk_backend_config_set_ilovecandy (PkBackendConfig *config)
 }
 
 static void
-pk_backend_config_set_showsize (PkBackendConfig *config)
-{
-	g_return_if_fail (config != NULL);
-
-	config->showsize = TRUE;
-}
-
-static void
 pk_backend_config_set_totaldl (PkBackendConfig *config)
 {
 	g_return_if_fail (config != NULL);
@@ -162,6 +154,14 @@ pk_backend_config_set_usesyslog (PkBackendConfig *config)
 	config->usesyslog = TRUE;
 }
 
+static void
+pk_backend_config_set_verbosepkglists (PkBackendConfig *config)
+{
+	g_return_if_fail (config != NULL);
+
+	config->verbosepkglists = TRUE;
+}
+
 typedef struct
 {
 	 const gchar	*name;
@@ -172,10 +172,10 @@ typedef struct
 static const PkBackendConfigBoolean pk_backend_config_boolean_options[] = {
 	{ "CheckSpace", pk_backend_config_set_checkspace },
 	{ "ILoveCandy", pk_backend_config_set_ilovecandy },
-	{ "ShowSize", pk_backend_config_set_showsize },
 	{ "TotalDownload", pk_backend_config_set_totaldl },
 	{ "UseDelta", pk_backend_config_set_usedelta },
 	{ "UseSyslog", pk_backend_config_set_usesyslog },
+	{ "VerbosePkgLists", pk_backend_config_set_verbosepkglists },
 	{ NULL, NULL }
 };
 
commit 2fdc1586cb54e7b776bcf5bac9721e8be57a0afb
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Oct 29 20:02:58 2011 +1300

    alpm: implement preliminary signature checking

diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index db494cf..acaa022 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -44,6 +44,7 @@ typedef struct
 
 	 alpm_list_t	*repos;
 	 GHashTable	*servers;
+	 GHashTable	*levels;
 	 GRegex		*xrepo, *xarch;
 } PkBackendConfig;
 
@@ -51,10 +52,20 @@ static PkBackendConfig *
 pk_backend_config_new (void)
 {
 	PkBackendConfig *config = g_new0 (PkBackendConfig, 1);
+	alpm_siglevel_t *level = g_new0 (alpm_siglevel_t, 1);
+
 	config->servers = g_hash_table_new_full (g_str_hash, g_str_equal,
 						 g_free, NULL);
+	config->levels = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
+						g_free);
+
+	*level |= ALPM_SIG_PACKAGE | ALPM_SIG_PACKAGE_OPTIONAL;
+	*level |= ALPM_SIG_DATABASE | ALPM_SIG_DATABASE_OPTIONAL;
+	g_hash_table_insert (config->levels, g_strdup ("options"), level);
+
 	config->xrepo = g_regex_new ("\\$repo", 0, 0, NULL);
 	config->xarch = g_regex_new ("\\$arch", 0, 0, NULL);
+
 	return config;
 }
 
@@ -97,6 +108,8 @@ pk_backend_config_free (PkBackendConfig *config)
 	g_hash_table_foreach_remove (config->servers,
 				     pk_backend_config_servers_free, NULL);
 	g_hash_table_unref (config->servers);
+	g_hash_table_unref (config->levels);
+
 	g_regex_unref (config->xrepo);
 	g_regex_unref (config->xarch);
 }
@@ -483,6 +496,95 @@ pk_backend_config_repo_add_server (PkBackendConfig *config, const gchar *repo,
 }
 
 static gboolean
+pk_backend_config_set_siglevel (PkBackendConfig *config, const gchar *section,
+				const gchar *list, GError **error)
+{
+	alpm_siglevel_t *level;
+
+	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (section != NULL, FALSE);
+	g_return_val_if_fail (list != NULL, FALSE);
+
+	level = g_hash_table_lookup (config->levels, section);
+	if (level == NULL) {
+		level = g_hash_table_lookup (config->levels, "options");
+		level = g_memdup (level, sizeof (alpm_siglevel_t));
+		g_hash_table_insert (config->levels, g_strdup (section), level);
+	}
+
+	while (TRUE) {
+		gboolean package = TRUE, database = TRUE;
+
+		if (g_str_has_prefix (list, "Package")) {
+			database = FALSE;
+			list += 7;
+		} else if (g_str_has_prefix (list, "Database")) {
+			package = FALSE;
+			list += 8;
+		}
+
+		/* this also allows e.g. NeverEver, so put prefixes last */
+		if (g_str_has_prefix (list, "Never") == 0) {
+			if (package) {
+				*level &= ~ALPM_SIG_PACKAGE;
+			}
+			if (database) {
+				*level &= ~ALPM_SIG_DATABASE;
+			}
+		} else if (g_str_has_prefix (list, "Optional") == 0) {
+			if (package) {
+				*level |= ALPM_SIG_PACKAGE;
+				*level |= ALPM_SIG_PACKAGE_OPTIONAL;
+			}
+			if (database) {
+				*level |= ALPM_SIG_DATABASE;
+				*level |= ALPM_SIG_DATABASE_OPTIONAL;
+			}
+		} else if (g_str_has_prefix (list, "Required") == 0) {
+			if (package) {
+				*level |= ALPM_SIG_PACKAGE;
+				*level &= ~ALPM_SIG_PACKAGE_OPTIONAL;
+			}
+			if (database) {
+				*level |= ALPM_SIG_DATABASE;
+				*level &= ~ALPM_SIG_DATABASE_OPTIONAL;
+			}
+		} else if (g_str_has_prefix (list, "TrustedOnly") == 0) {
+			if (package) {
+				*level &= ~ALPM_SIG_PACKAGE_MARGINAL_OK;
+				*level &= ~ALPM_SIG_PACKAGE_UNKNOWN_OK;
+			}
+			if (database) {
+				*level &= ~ALPM_SIG_DATABASE_MARGINAL_OK;
+				*level &= ~ALPM_SIG_DATABASE_UNKNOWN_OK;
+			}
+		} else if (g_str_has_prefix (list, "TrustAll") == 0) {
+			if (package) {
+				*level |= ALPM_SIG_PACKAGE_MARGINAL_OK;
+				*level |= ALPM_SIG_PACKAGE_UNKNOWN_OK;
+			}
+			if (database) {
+				*level |= ALPM_SIG_DATABASE_MARGINAL_OK;
+				*level |= ALPM_SIG_DATABASE_UNKNOWN_OK;
+			}
+		} else {
+			g_set_error (error, ALPM_ERROR, ALPM_ERR_CONFIG_INVALID,
+				     "invalid SigLevel value: %s", list);
+			return FALSE;
+		}
+
+		list = strchr (list, ' ');
+		if (list == NULL) {
+			break;
+		} else {
+			++list;
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
 pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
 			 gchar *section, GError **error)
 {
@@ -610,6 +712,15 @@ pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
 				continue;
 			}
 		}
+	
+		if (g_strcmp0 (key, "SigLevel") == 0 && str != NULL) {
+			if (!pk_backend_config_set_siglevel (config, section,
+							     str, &e)) {
+				break;
+			} else {
+				continue;
+			}
+		}
 
 		/* report errors from above */
 		g_set_error (&e, ALPM_ERROR, ALPM_ERR_CONFIG_INVALID,
@@ -709,6 +820,7 @@ static alpm_handle_t *
 pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 {
 	alpm_handle_t *handle;
+	alpm_siglevel_t *level;
 
 	g_return_val_if_fail (config != NULL, FALSE);
 
@@ -722,6 +834,9 @@ pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 	alpm_option_set_usesyslog (handle, config->usesyslog);
 	alpm_option_set_arch (handle, config->arch);
 
+	level = g_hash_table_lookup (config->levels, "options");
+	alpm_option_set_default_siglevel (handle, *level);
+
 	/* backend takes ownership */
 	g_free (xfercmd);
 	xfercmd = config->xfercmd;
@@ -759,7 +874,8 @@ pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 	alpm_option_set_noupgrades (handle, config->noupgrades);
 	config->noupgrades = NULL;
 
-	pk_backend_configure_repos (config->repos, config->servers);
+	pk_backend_configure_repos (config->repos, config->servers,
+				    config->levels);
 
 	return handle;
 }
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index 27b5816..ac530c7 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -30,6 +30,7 @@ typedef struct
 {
 	gchar *name;
 	alpm_list_t *servers;
+	alpm_siglevel_t level;
 } PkBackendRepo;
 
 static GHashTable *disabled = NULL;
@@ -154,7 +155,7 @@ disabled_repos_configure (GHashTable *table, GError **error)
 			continue;
 		}
 
-		db = alpm_db_register_sync (alpm, repo->name);
+		db = alpm_db_register_sync (alpm, repo->name, repo->level);
 		if (db == NULL) {
 			enum _alpm_errno_t errno = alpm_errno (alpm);
 			g_set_error (error, ALPM_ERROR, errno, "[%s]: %s",
@@ -169,7 +170,8 @@ disabled_repos_configure (GHashTable *table, GError **error)
 }
 
 void
-pk_backend_configure_repos (alpm_list_t *repos, GHashTable *servers)
+pk_backend_configure_repos (alpm_list_t *repos, GHashTable *servers,
+			    GHashTable *levels)
 {
 	alpm_list_t *i;
 
@@ -182,6 +184,13 @@ pk_backend_configure_repos (alpm_list_t *repos, GHashTable *servers)
 		repo->name = g_strdup ((const gchar *) i->data);
 		repo->servers = alpm_list_strdup ((alpm_list_t *) value);
 
+		value = g_hash_table_lookup (levels, i->data);
+		if (value != NULL) {
+			repo->level = *(alpm_siglevel_t *)value;
+		} else {
+			repo->level = ALPM_SIG_USE_DEFAULT;
+		}
+
 		configured = alpm_list_add (configured, repo);
 	}
 }
diff --git a/backends/alpm/pk-backend-databases.h b/backends/alpm/pk-backend-databases.h
index ea825f2..2636cae 100644
--- a/backends/alpm/pk-backend-databases.h
+++ b/backends/alpm/pk-backend-databases.h
@@ -25,7 +25,8 @@
 #include <pk-backend.h>
 
 void		 pk_backend_configure_repos		(alpm_list_t *repos,
-							 GHashTable *servers);
+							 GHashTable *servers,
+							 GHashTable *levels);
 
 gboolean	 pk_backend_initialize_databases	(PkBackend *self,
 							 GError **error);
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
index 9d098b5..5b5e2b2 100644
--- a/backends/alpm/pk-backend-install.c
+++ b/backends/alpm/pk-backend-install.c
@@ -33,11 +33,14 @@ static gint
 alpm_add_file (const gchar *filename)
 {
 	alpm_pkg_t *pkg;
+	alpm_siglevel_t level;
 
 	g_return_val_if_fail (filename != NULL, -1);
 	g_return_val_if_fail (alpm != NULL, -1);
 
-	if (alpm_pkg_load (alpm, filename, 1, &pkg) < 0) {
+	level = alpm_option_get_default_siglevel (alpm);
+
+	if (alpm_pkg_load (alpm, filename, 1, level, &pkg) < 0) {
 		return -1;
 	}
 
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index d3a68f3..f812766 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -323,6 +323,8 @@ pk_backend_transaction_conv_cb (alpm_question_t question, gpointer data1,
 			break;
 
 		case ALPM_QUESTION_REMOVE_PKGS:
+		/* TODO: handle keys better */
+		case ALPM_QUESTION_IMPORT_KEY:
 			g_debug ("unsafe question %d", question);
 			*result = 0;
 			break;
commit f7b6be13af14a5ae802b12c50954c9a757cd9048
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Oct 29 15:59:15 2011 +1300

    alpm: report new informational updates to frontend

diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index 3ededda..d3a68f3 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -213,7 +213,8 @@ pk_backend_transaction_progress_cb (alpm_progress_t type, const gchar *target,
 	/* TODO: revert when fixed upstream */
 	if (type == ALPM_PROGRESS_CONFLICTS_START ||
 	    type == ALPM_PROGRESS_DISKSPACE_START ||
-	    type == ALPM_PROGRESS_INTEGRITY_START) {
+	    type == ALPM_PROGRESS_INTEGRITY_START ||
+	    type == ALPM_PROGRESS_LOAD_START) {
 		if (current < targets) {
 			overall = percent + current++ * 100;
 		}
@@ -236,6 +237,7 @@ pk_backend_transaction_progress_cb (alpm_progress_t type, const gchar *target,
 		case ALPM_PROGRESS_CONFLICTS_START:
 		case ALPM_PROGRESS_DISKSPACE_START:
 		case ALPM_PROGRESS_INTEGRITY_START:
+		case ALPM_PROGRESS_LOAD_START:
 			if (percent == recent) {
 				break;
 			}
@@ -533,6 +535,14 @@ pk_backend_transaction_upgrade_done (PkBackend *self, alpm_pkg_t *pkg,
 }
 
 static void
+pk_backend_transaction_setup (PkBackend *self)
+{
+	g_return_if_fail (self != NULL);
+
+	pk_backend_set_status (self, PK_STATUS_ENUM_SETUP);
+}
+
+static void
 pk_backend_transaction_event_cb (alpm_event_t event, gpointer data,
 				 gpointer old)
 {
@@ -579,6 +589,10 @@ pk_backend_transaction_event_cb (alpm_event_t event, gpointer data,
 							     old);
 			break;
 
+		case ALPM_EVENT_LOAD_START:
+			pk_backend_transaction_setup (backend);
+			break;
+
 		case ALPM_EVENT_SCRIPTLET_INFO:
 			pk_backend_output (backend, data);
 			break;
commit 5bbeb16d5d30b4c4bc79a7589cfb30b7d2c9c4ad
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Oct 29 15:45:54 2011 +1300

    alpm: update error codes again

diff --git a/backends/alpm/pk-backend-error.c b/backends/alpm/pk-backend-error.c
index 2f34232..57c4b4b 100644
--- a/backends/alpm/pk-backend-error.c
+++ b/backends/alpm/pk-backend-error.c
@@ -88,13 +88,19 @@ pk_backend_error (PkBackend *self, GError *error)
 			code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
 			break;
 
+		case ALPM_ERR_DB_INVALID:
 		case ALPM_ERR_DB_VERSION:
 		case ALPM_ERR_DB_REMOVE:
 		case ALPM_ERR_SERVER_BAD_URL:
-		case ALPM_ERR_SIG_MISSINGDIR:
 			code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
 			break;
 
+		case ALPM_ERR_DB_INVALID_SIG:
+		case ALPM_ERR_PKG_INVALID_SIG:
+		case ALPM_ERR_SIG_INVALID:
+			code = PK_ERROR_ENUM_BAD_GPG_SIGNATURE;
+			break;
+
 		case ALPM_ERR_DB_WRITE:
 			code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
 			break;
@@ -127,6 +133,10 @@ pk_backend_error (PkBackend *self, GError *error)
 			code = PK_ERROR_ENUM_INVALID_PACKAGE_FILE;
 			break;
 
+		case ALPM_ERR_PKG_INVALID_CHECKSUM:
+			code = PK_ERROR_ENUM_PACKAGE_CORRUPT;
+			break;
+
 		case ALPM_ERR_PKG_CANT_REMOVE:
 			code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE;
 			break;
@@ -135,11 +145,7 @@ pk_backend_error (PkBackend *self, GError *error)
 			code = PK_ERROR_ENUM_INCOMPATIBLE_ARCHITECTURE;
 			break;
 
-		case ALPM_ERR_SIG_INVALID:
-			code = PK_ERROR_ENUM_BAD_GPG_SIGNATURE;
-			break;
-
-		case ALPM_ERR_SIG_UNKNOWN:
+		case ALPM_ERR_SIG_MISSING:
 			code = PK_ERROR_ENUM_MISSING_GPG_SIGNATURE;
 			break;
 
commit d59a5047895a9764c10ea82368871ab87a99ea44
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Oct 29 15:35:24 2011 +1300

    alpm: make use of new package origin API

diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
index e543231..2d057aa 100644
--- a/backends/alpm/pk-backend-packages.c
+++ b/backends/alpm/pk-backend-packages.c
@@ -30,10 +30,8 @@ gchar *
 alpm_pkg_build_id (alpm_pkg_t *pkg)
 {
 	const gchar *name, *version, *arch, *repo;
-	alpm_db_t *db;
 
 	g_return_val_if_fail (pkg != NULL, NULL);
-	g_return_val_if_fail (localdb != NULL, NULL);
 
 	name = alpm_pkg_get_name (pkg);
 	version = alpm_pkg_get_version (pkg);
@@ -43,12 +41,11 @@ alpm_pkg_build_id (alpm_pkg_t *pkg)
 		arch = "any";
 	}
 
-	db = alpm_pkg_get_db (pkg);
-	/* TODO: check */
-	if (db == NULL || db == localdb) {
-		repo = "installed";
+	/* TODO: check correctness */
+	if (alpm_pkg_get_origin (pkg) == PKG_FROM_SYNCDB) {
+		repo = alpm_db_get_name (alpm_pkg_get_db (pkg));
 	} else {
-		repo = alpm_db_get_name (db);
+		repo = "installed";
 	}
 
 	return pk_package_id_build (name, version, arch, repo);
@@ -143,7 +140,7 @@ pk_backend_resolve_package (PkBackend *self, const gchar *package,
 					  PK_FILTER_ENUM_NOT_INSTALLED);
 	skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED);
 
-	if (alpm_pkg_get_db (pkg) == localdb) {
+	if (alpm_pkg_get_origin (pkg) == PKG_FROM_LOCALDB) {
 		if (!skip_local) {
 			pk_backend_pkg (self, pkg, PK_INFO_ENUM_INSTALLED);
 		}
@@ -288,7 +285,7 @@ pk_backend_get_details_thread (PkBackend *self)
 		desc = alpm_pkg_get_desc (pkg);
 		url = alpm_pkg_get_url (pkg);
 
-		if (alpm_pkg_get_db (pkg) == localdb) {
+		if (alpm_pkg_get_origin (pkg) == PKG_FROM_LOCALDB) {
 			size = alpm_pkg_get_isize (pkg);
 		} else {
 			size = alpm_pkg_download_size (pkg);
commit 868dc55e6e745751b0a6eecfd5ed4cb8110d3f20
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Oct 29 02:59:28 2011 +1300

    alpm: port public structs to new API

diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index 761f597..3ededda 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -68,9 +68,9 @@ alpm_pkg_has_basename (alpm_pkg_t *pkg, const gchar *basename)
 	}
 
 	for (i = alpm_pkg_get_deltas (pkg); i != NULL; i = i->next) {
-		const gchar *patch = alpm_delta_get_filename (i->data);
+		alpm_delta_t *delta = (alpm_delta_t *) i->data;
 
-		if (g_strcmp0 (patch, basename) == 0) {
+		if (g_strcmp0 (delta->delta, basename) == 0) {
 			return TRUE;
 		}
 	}
@@ -282,19 +282,19 @@ pk_backend_install_ignorepkg (PkBackend *self, alpm_pkg_t *pkg, gint *result)
 }
 
 static void
-pk_backend_select_provider (PkBackend *self, alpm_depend_t *dep,
+pk_backend_select_provider (PkBackend *self, alpm_depend_t *depend,
 			    const alpm_list_t *providers)
 {
 	gchar *output;
 
 	g_return_if_fail (self != NULL);
-	g_return_if_fail (dep != NULL);
+	g_return_if_fail (depend != NULL);
 	g_return_if_fail (providers != NULL);
 
 	output = g_strdup_printf ("provider package was selected "
 				  "(%s provides %s)\n",
 				  alpm_pkg_get_name (providers->data),
-				  alpm_dep_get_name (dep));
+				  depend->name);
 	pk_backend_output (self, output);
 	g_free (output);
 }
@@ -659,10 +659,11 @@ alpm_miss_build_list (const alpm_list_t *i)
 	}
 
 	for (; i != NULL; i = i->next) {
-		alpm_depend_t *dep = alpm_miss_get_dep (i->data);
-		gchar *depend = alpm_dep_compute_string (dep);
+		alpm_depmissing_t *miss = (alpm_depmissing_t *) i->data;
+		gchar *depend = alpm_dep_compute_string (miss->depend);
+
 		g_string_append_printf (list, "%s <- %s, ", depend,
-					alpm_miss_get_target (i->data));
+					miss->target);
 		free (depend);
 	}
 
@@ -671,25 +672,21 @@ alpm_miss_build_list (const alpm_list_t *i)
 }
 
 static void
-alpm_dep_free (gpointer dep)
+alpm_depend_free (alpm_depend_t *depend)
 {
-	/* TODO: remove when implemented in libalpm */
-	free ((gpointer) alpm_dep_get_name (dep));
-	free ((gpointer) alpm_dep_get_version (dep));
-	free (dep);
+	free (depend->name);
+	free (depend->version);
+	free (depend);
 }
 
 static void
-alpm_miss_free (gpointer miss)
+alpm_depmissing_free (gpointer miss)
 {
-	/* TODO: remove when implemented in libalpm */
-	const gchar *temp = alpm_miss_get_causingpkg (miss);
-	if (temp != NULL) {
-		free ((gpointer) temp);
-	}
+	alpm_depmissing_t *self = (alpm_depmissing_t *) miss;
 
-	free ((gpointer) alpm_miss_get_target (miss));
-	alpm_dep_free (alpm_miss_get_dep (miss));
+	free (self->target);
+	alpm_depend_free (self->depend);
+	free (self->causingpkg);
 	free (miss);
 }
 
@@ -705,17 +702,20 @@ alpm_conflict_build_list (const alpm_list_t *i)
 	}
 
 	for (; i != NULL; i = i->next) {
-		const gchar *first = alpm_conflict_get_package1 (i->data);
-		const gchar *second = alpm_conflict_get_package2 (i->data);
-		const gchar *reason = alpm_conflict_get_reason (i->data);
-
-		if (g_strcmp0 (first, reason) == 0 ||
-		    g_strcmp0 (second, reason) == 0) {
-			g_string_append_printf (list, "%s <-> %s, ", first,
-						second);
+		alpm_conflict_t *conflict = (alpm_conflict_t *) i->data;
+		alpm_depend_t *depend = conflict->reason;
+
+		if (g_strcmp0 (conflict->package1, depend->name) == 0 ||
+		    g_strcmp0 (conflict->package2, depend->name) == 0) {
+			g_string_append_printf (list, "%s <-> %s, ",
+						conflict->package1,
+						conflict->package2);
 		} else {
-			g_string_append_printf (list, "%s <-> %s (%s), ", first,
-						second, reason);
+			gchar *reason = alpm_dep_compute_string (depend);
+			g_string_append_printf (list, "%s <-> %s (%s), ",
+						conflict->package1,
+						conflict->package2, reason);
+			g_free (reason);
 		}
 	}
 
@@ -726,10 +726,10 @@ alpm_conflict_build_list (const alpm_list_t *i)
 static void
 alpm_conflict_free (gpointer conflict)
 {
-	/* TODO: remove when implemented in libalpm */
-	free ((gpointer) alpm_conflict_get_package1 (conflict));
-	free ((gpointer) alpm_conflict_get_package2 (conflict));
-	free ((gpointer) alpm_conflict_get_reason (conflict));
+	alpm_conflict_t *self = (alpm_conflict_t *) conflict;
+
+	free (self->package1);
+	free (self->package2);
 	free (conflict);
 }
 
@@ -745,15 +745,17 @@ alpm_fileconflict_build_list (const alpm_list_t *i)
 	}
 
 	for (; i != NULL; i = i->next) {
-		const gchar *target = alpm_fileconflict_get_target (i->data);
-		const gchar *file = alpm_fileconflict_get_file (i->data);
-		const gchar *ctarget = alpm_fileconflict_get_ctarget (i->data);
-		if (*ctarget != '\0') {
+		alpm_fileconflict_t *conflict = (alpm_fileconflict_t *) i->data;
+
+		if (*conflict->ctarget != '\0') {
 			g_string_append_printf (list, "%s <-> %s (%s), ",
-						target, ctarget, file);
+						conflict->target,
+						conflict->ctarget,
+						conflict->file);
 		} else {
-			g_string_append_printf (list, "%s (%s), ", target,
-						file);
+			g_string_append_printf (list, "%s (%s), ",
+						conflict->target,
+						conflict->file);
 		}
 	}
 
@@ -764,14 +766,11 @@ alpm_fileconflict_build_list (const alpm_list_t *i)
 static void
 alpm_fileconflict_free (gpointer conflict)
 {
-	/* TODO: remove when implemented in libalpm */
-	const gchar *temp = alpm_fileconflict_get_ctarget (conflict);
-	if (*temp != '\0') {
-		free ((gpointer) temp);
-	}
+	alpm_fileconflict_t *self = (alpm_fileconflict_t *) conflict;
 
-	free ((gpointer) alpm_fileconflict_get_target (conflict));
-	free ((gpointer) alpm_fileconflict_get_file (conflict));
+	free (self->target);
+	free (self->file);
+	free (self->ctarget);
 	free (conflict);
 }
 
@@ -796,7 +795,7 @@ pk_backend_transaction_simulate (PkBackend *self, GError **error)
 
 		case ALPM_ERR_UNSATISFIED_DEPS:
 			prefix = alpm_miss_build_list (data);
-			alpm_list_free_inner (data, alpm_miss_free);
+			alpm_list_free_inner (data, alpm_depmissing_free);
 			alpm_list_free (data);
 			break;
 
commit a92d37896a2a10aa9bdfa411ebaafd8266c9cb1a
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Sat Oct 29 02:21:41 2011 +1300

    alpm: port type names to new API

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 1e6d732..8ecc7dd 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -37,7 +37,7 @@ GCancellable *cancellable = NULL;
 static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
 
 alpm_handle_t *alpm = NULL;
-pmdb_t *localdb = NULL;
+alpm_db_t *localdb = NULL;
 
 gchar *xfercmd = NULL;
 alpm_list_t *holdpkgs = NULL;
@@ -164,7 +164,7 @@ out:
 }
 
 static void
-pk_backend_logcb (pmloglevel_t level, const gchar *format, va_list args)
+pk_backend_logcb (alpm_loglevel_t level, const gchar *format, va_list args)
 {
 	gchar *output;
 
diff --git a/backends/alpm/pk-backend-alpm.h b/backends/alpm/pk-backend-alpm.h
index 7cdd8ce..ecd6d0f 100644
--- a/backends/alpm/pk-backend-alpm.h
+++ b/backends/alpm/pk-backend-alpm.h
@@ -29,7 +29,7 @@ extern PkBackend *backend;
 extern GCancellable *cancellable;
 
 extern alpm_handle_t *alpm;
-extern pmdb_t *localdb;
+extern alpm_db_t *localdb;
 
 extern gchar *xfercmd;
 extern alpm_list_t *holdpkgs;
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index 76d6f49..27b5816 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -147,7 +147,7 @@ disabled_repos_configure (GHashTable *table, GError **error)
 
 	for (i = configured; i != NULL; i = i->next) {
 		PkBackendRepo *repo = (PkBackendRepo *) i->data;
-		pmdb_t *db;
+		alpm_db_t *db;
 
 		if (g_hash_table_lookup (table, repo->name) != NULL) {
 			/* repo is disabled */
@@ -252,7 +252,7 @@ pk_backend_get_repo_list_thread (PkBackend *self)
 
 	/* emit enabled repos */
 	for (i = alpm_option_get_syncdbs (alpm); i != NULL; i = i->next) {
-		pmdb_t *db = (pmdb_t *) i->data;
+		alpm_db_t *db = (alpm_db_t *) i->data;
 		const gchar *repo = alpm_db_get_name (db);
 
 		if (pk_backend_cancelled (self)) {
@@ -338,7 +338,7 @@ pk_backend_repo_disable_thread (PkBackend *self)
 	g_return_val_if_fail (repo != NULL, FALSE);
 
 	for (i = alpm_option_get_syncdbs (alpm); i != NULL; i = i->next) {
-		pmdb_t *db = (pmdb_t *) i->data;
+		alpm_db_t *db = (alpm_db_t *) i->data;
 		const gchar *name = alpm_db_get_name (db);
 
 		if (g_strcmp0 (repo, name) == 0) {
diff --git a/backends/alpm/pk-backend-depends.c b/backends/alpm/pk-backend-depends.c
index 2585fc6..7c7b45a 100644
--- a/backends/alpm/pk-backend-depends.c
+++ b/backends/alpm/pk-backend-depends.c
@@ -29,7 +29,7 @@
 #include "pk-backend-error.h"
 #include "pk-backend-packages.h"
 
-static pmpkg_t *
+static alpm_pkg_t *
 alpm_list_find_pkg (const alpm_list_t *pkgs, const gchar *name)
 {
 	g_return_val_if_fail (name != NULL, NULL);
@@ -50,7 +50,7 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 	PkBitfield filters;
 	gboolean recursive, skip_local, skip_remote;
 
-	pmpkg_t *provider;
+	alpm_pkg_t *provider;
 	alpm_list_t *pkgcache, *syncdbs;
 
 	g_return_val_if_fail (self != NULL, pkgs);
@@ -109,7 +109,7 @@ static alpm_list_t *
 pk_backend_find_requirer (PkBackend *self, alpm_list_t *pkgs, const gchar *name,
 			  GError **error)
 {
-	pmpkg_t *requirer;
+	alpm_pkg_t *requirer;
 
 	g_return_val_if_fail (self != NULL, pkgs);
 	g_return_val_if_fail (name != NULL, pkgs);
@@ -151,7 +151,7 @@ pk_backend_get_depends_thread (PkBackend *self)
 
 	/* construct an initial package list */
 	for (; *packages != NULL; ++packages) {
-		pmpkg_t *pkg;
+		alpm_pkg_t *pkg;
 
 		if (pk_backend_cancelled (self)) {
 			break;
@@ -207,7 +207,7 @@ pk_backend_get_requires_thread (PkBackend *self)
 
 	/* construct an initial package list */
 	for (; *packages != NULL; ++packages) {
-		pmpkg_t *pkg;
+		alpm_pkg_t *pkg;
 
 		if (pk_backend_cancelled (self)) {
 			break;
diff --git a/backends/alpm/pk-backend-groups.c b/backends/alpm/pk-backend-groups.c
index 59e304d..6056c54 100644
--- a/backends/alpm/pk-backend-groups.c
+++ b/backends/alpm/pk-backend-groups.c
@@ -125,7 +125,7 @@ pk_backend_destroy_groups (PkBackend *self)
 }
 
 const gchar *
-alpm_pkg_get_group (pmpkg_t *pkg)
+alpm_pkg_get_group (alpm_pkg_t *pkg)
 {
 	const alpm_list_t *i;
 
diff --git a/backends/alpm/pk-backend-groups.h b/backends/alpm/pk-backend-groups.h
index 28dcf65..d736e37 100644
--- a/backends/alpm/pk-backend-groups.h
+++ b/backends/alpm/pk-backend-groups.h
@@ -29,4 +29,4 @@ gboolean	 pk_backend_initialize_groups	(PkBackend *self,
 
 void		 pk_backend_destroy_groups	(PkBackend *self);
 
-const gchar	*alpm_pkg_get_group		(pmpkg_t *pkg);
+const gchar	*alpm_pkg_get_group		(alpm_pkg_t *pkg);
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
index d500eaf..9d098b5 100644
--- a/backends/alpm/pk-backend-install.c
+++ b/backends/alpm/pk-backend-install.c
@@ -32,7 +32,7 @@
 static gint
 alpm_add_file (const gchar *filename)
 {
-	pmpkg_t *pkg;
+	alpm_pkg_t *pkg;
 
 	g_return_val_if_fail (filename != NULL, -1);
 	g_return_val_if_fail (alpm != NULL, -1);
diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
index 74fe5f6..e543231 100644
--- a/backends/alpm/pk-backend-packages.c
+++ b/backends/alpm/pk-backend-packages.c
@@ -27,10 +27,10 @@
 #include "pk-backend-packages.h"
 
 gchar *
-alpm_pkg_build_id (pmpkg_t *pkg)
+alpm_pkg_build_id (alpm_pkg_t *pkg)
 {
 	const gchar *name, *version, *arch, *repo;
-	pmdb_t *db;
+	alpm_db_t *db;
 
 	g_return_val_if_fail (pkg != NULL, NULL);
 	g_return_val_if_fail (localdb != NULL, NULL);
@@ -55,7 +55,7 @@ alpm_pkg_build_id (pmpkg_t *pkg)
 }
 
 void
-pk_backend_pkg (PkBackend *self, pmpkg_t *pkg, PkInfoEnum info)
+pk_backend_pkg (PkBackend *self, alpm_pkg_t *pkg, PkInfoEnum info)
 {
 	gchar *package;
 
@@ -67,13 +67,13 @@ pk_backend_pkg (PkBackend *self, pmpkg_t *pkg, PkInfoEnum info)
 	g_free (package);
 }
 
-pmpkg_t *
+alpm_pkg_t *
 pk_backend_find_pkg (PkBackend *self, const gchar *package_id, GError **error)
 {
 	gchar **package;
 	const gchar *repo_id;
-	pmdb_t *db = NULL;
-	pmpkg_t *pkg;
+	alpm_db_t *db = NULL;
+	alpm_pkg_t *pkg;
 
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (package_id != NULL, NULL);
@@ -124,7 +124,7 @@ static gboolean
 pk_backend_resolve_package (PkBackend *self, const gchar *package,
 			    GError **error)
 {
-	pmpkg_t *pkg;
+	alpm_pkg_t *pkg;
 	
 	PkBitfield filters;
 	gboolean skip_local, skip_remote;
@@ -159,7 +159,7 @@ pk_backend_resolve_package (PkBackend *self, const gchar *package,
 static gboolean
 pk_backend_resolve_name (PkBackend *self, const gchar *name, GError **error)
 {
-	pmpkg_t *pkg;
+	alpm_pkg_t *pkg;
 	int code;
 	
 	PkBitfield filters;
@@ -256,7 +256,7 @@ pk_backend_get_details_thread (PkBackend *self)
 	g_return_val_if_fail (packages != NULL, FALSE);
 
 	for (; *packages != NULL; ++packages) {
-		pmpkg_t *pkg;
+		alpm_pkg_t *pkg;
 		const alpm_list_t *i;
 
 		GString *licenses;
@@ -326,7 +326,7 @@ pk_backend_get_files_thread (PkBackend *self)
 	g_return_val_if_fail (packages != NULL, FALSE);
 
 	for (; *packages != NULL; ++packages) {
-		pmpkg_t *pkg;
+		alpm_pkg_t *pkg;
 		const gchar *root;
 
 		GString *files;
diff --git a/backends/alpm/pk-backend-packages.h b/backends/alpm/pk-backend-packages.h
index 4b2d7f8..2d54684 100644
--- a/backends/alpm/pk-backend-packages.h
+++ b/backends/alpm/pk-backend-packages.h
@@ -24,10 +24,11 @@
 #include <alpm.h>
 #include <pk-backend.h>
 
-gchar	*alpm_pkg_build_id	(pmpkg_t *pkg);
+gchar		*alpm_pkg_build_id	(alpm_pkg_t *pkg);
 
-void	 pk_backend_pkg		(PkBackend *self, pmpkg_t *pkg,
-				 PkInfoEnum info);
+void		 pk_backend_pkg		(PkBackend *self, alpm_pkg_t *pkg,
+					 PkInfoEnum info);
 
-pmpkg_t	*pk_backend_find_pkg	(PkBackend *self, const gchar *package_id,
-				 GError **error);
+alpm_pkg_t	*pk_backend_find_pkg	(PkBackend *self,
+					 const gchar *package_id,
+					 GError **error);
diff --git a/backends/alpm/pk-backend-remove.c b/backends/alpm/pk-backend-remove.c
index 6414c4d..1993061 100644
--- a/backends/alpm/pk-backend-remove.c
+++ b/backends/alpm/pk-backend-remove.c
@@ -46,7 +46,7 @@ pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 		gchar **package = pk_package_id_split (*packages);
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
-		pmpkg_t *pkg = alpm_db_get_pkg (localdb, name);
+		alpm_pkg_t *pkg = alpm_db_get_pkg (localdb, name);
 		if (pkg == NULL || alpm_remove_pkg (alpm, pkg) < 0) {
 			enum _alpm_errno_t errno = alpm_errno (alpm);
 			g_set_error (error, ALPM_ERROR, errno, "%s: %s", name,
@@ -89,7 +89,7 @@ pk_backend_transaction_remove_simulate (PkBackend *self, GError **error)
 static gboolean
 pk_backend_simulate_remove_packages_thread (PkBackend *self)
 {
-	pmtransflag_t flags = ALPM_TRANS_FLAG_CASCADE;
+	alpm_transflag_t flags = ALPM_TRANS_FLAG_CASCADE;
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
@@ -111,7 +111,7 @@ pk_backend_simulate_remove_packages_thread (PkBackend *self)
 static gboolean
 pk_backend_remove_packages_thread (PkBackend *self)
 {
-	pmtransflag_t flags = 0;
+	alpm_transflag_t flags = 0;
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
diff --git a/backends/alpm/pk-backend-search.c b/backends/alpm/pk-backend-search.c
index bcfa992..c4e80ae 100644
--- a/backends/alpm/pk-backend-search.c
+++ b/backends/alpm/pk-backend-search.c
@@ -75,7 +75,7 @@ pk_backend_pattern_chroot (const gchar *needle, GError **error)
 }
 
 static gboolean
-pk_backend_match_all (pmpkg_t *pkg, gpointer pattern)
+pk_backend_match_all (alpm_pkg_t *pkg, gpointer pattern)
 {
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (pattern != NULL, FALSE);
@@ -85,10 +85,10 @@ pk_backend_match_all (pmpkg_t *pkg, gpointer pattern)
 }
 
 static gboolean
-pk_backend_match_details (pmpkg_t *pkg, GRegex *regex)
+pk_backend_match_details (alpm_pkg_t *pkg, GRegex *regex)
 {
 	const gchar *desc;
-	pmdb_t *db;
+	alpm_db_t *db;
 	const alpm_list_t *i;
 
 	g_return_val_if_fail (pkg != NULL, FALSE);
@@ -124,7 +124,7 @@ pk_backend_match_details (pmpkg_t *pkg, GRegex *regex)
 }
 
 static gboolean
-pk_backend_match_file (pmpkg_t *pkg, const gchar *needle)
+pk_backend_match_file (alpm_pkg_t *pkg, const gchar *needle)
 {
 	alpm_filelist_t *files;
 	gsize i;
@@ -165,7 +165,7 @@ pk_backend_match_file (pmpkg_t *pkg, const gchar *needle)
 }
 
 static gboolean
-pk_backend_match_group (pmpkg_t *pkg, const gchar *needle)
+pk_backend_match_group (alpm_pkg_t *pkg, const gchar *needle)
 {
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (needle != NULL, FALSE);
@@ -175,7 +175,7 @@ pk_backend_match_group (pmpkg_t *pkg, const gchar *needle)
 }
 
 static gboolean
-pk_backend_match_name (pmpkg_t *pkg, GRegex *regex)
+pk_backend_match_name (alpm_pkg_t *pkg, GRegex *regex)
 {
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (regex != NULL, FALSE);
@@ -185,7 +185,7 @@ pk_backend_match_name (pmpkg_t *pkg, GRegex *regex)
 }
 
 static gboolean
-pk_backend_match_provides (pmpkg_t *pkg, gpointer pattern)
+pk_backend_match_provides (alpm_pkg_t *pkg, gpointer pattern)
 {
 	/* TODO: implement GStreamer codecs, Pango fonts, etc. */
 	const alpm_list_t *i;
@@ -222,7 +222,7 @@ typedef enum {
 } SearchType;
 
 typedef gpointer (*PatternFunc) (const gchar *needle, GError **error);
-typedef gboolean (*MatchFunc) (pmpkg_t *pkg, gpointer pattern);
+typedef gboolean (*MatchFunc) (alpm_pkg_t *pkg, gpointer pattern);
 
 static PatternFunc pattern_funcs[] = {
 	pk_backend_pattern_needle,
@@ -252,9 +252,9 @@ static MatchFunc match_funcs[] = {
 };
 
 static gboolean
-alpm_pkg_is_local (pmpkg_t *pkg)
+alpm_pkg_is_local (alpm_pkg_t *pkg)
 {
-	pmpkg_t *local;
+	alpm_pkg_t *local;
 
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
@@ -281,7 +281,7 @@ alpm_pkg_is_local (pmpkg_t *pkg)
 }
 
 static void
-pk_backend_search_db (PkBackend *self, pmdb_t *db, MatchFunc match,
+pk_backend_search_db (PkBackend *self, alpm_db_t *db, MatchFunc match,
 		      const alpm_list_t *patterns)
 {
 	const alpm_list_t *i, *j;
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index b6fc2c4..c770159 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -48,7 +48,7 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
 		const alpm_list_t *i = alpm_option_get_syncdbs (alpm);
-		pmpkg_t *pkg;
+		alpm_pkg_t *pkg;
 
 		for (; i != NULL; i = i->next) {
 			if (g_strcmp0 (alpm_db_get_name (i->data), repo) == 0) {
@@ -84,7 +84,7 @@ pk_backend_download_packages_thread (PkBackend *self)
 {
 	alpm_list_t *cachedirs;
 	const gchar *directory;
-	pmtransflag_t flags = 0;
+	alpm_transflag_t flags = 0;
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
@@ -185,7 +185,7 @@ pk_backend_install_packages (PkBackend *self, gboolean only_trusted,
 }
 
 static gboolean
-pk_backend_replaces_dependencies (PkBackend *self, pmpkg_t *pkg)
+pk_backend_replaces_dependencies (PkBackend *self, alpm_pkg_t *pkg)
 {
 	const alpm_list_t *i, *replaces;
 
@@ -195,7 +195,7 @@ pk_backend_replaces_dependencies (PkBackend *self, pmpkg_t *pkg)
 
 	replaces = alpm_pkg_get_replaces (pkg);
 	for (i = alpm_trans_get_remove (alpm); i != NULL; i = i->next) {
-		pmpkg_t *rpkg = (pmpkg_t *) i->data;
+		alpm_pkg_t *rpkg = (alpm_pkg_t *) i->data;
 		const gchar *rname = alpm_pkg_get_name (rpkg);
 
 		if (pk_backend_cancelled (self)) {
@@ -231,7 +231,7 @@ pk_backend_update_packages_thread (PkBackend *self)
 
 	/* change the install reason of packages that replace dependencies */
 	for (i = alpm_trans_get_add (alpm); i != NULL; i = i->next) {
-		pmpkg_t *pkg = (pmpkg_t *) i->data;
+		alpm_pkg_t *pkg = (alpm_pkg_t *) i->data;
 		const gchar *name = alpm_pkg_get_name (pkg);
 
 		if (pk_backend_cancelled (self)) {
@@ -251,7 +251,7 @@ pk_backend_update_packages_thread (PkBackend *self)
 
 	for (i = asdeps; i != NULL; i = i->next) {
 		const gchar *name = (const gchar *) i->data;
-		pmpkg_t *pkg = alpm_db_get_pkg (localdb, name);
+		alpm_pkg_t *pkg = alpm_db_get_pkg (localdb, name);
 		alpm_db_set_pkgreason (alpm, pkg, ALPM_PKG_REASON_DEPEND);
 	}
 
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index 15c706e..761f597 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -29,10 +29,10 @@
 static off_t dcomplete = 0;
 static off_t dtotal = 0;
 
-static pmpkg_t *dpkg = NULL;
+static alpm_pkg_t *dpkg = NULL;
 static GString *dfiles = NULL;
 
-static pmpkg_t *tpkg = NULL;
+static alpm_pkg_t *tpkg = NULL;
 static GString *toutput = NULL;
 
 static gchar *
@@ -51,7 +51,7 @@ pk_backend_resolve_path (PkBackend *self, const gchar *basename)
 }
 
 static gboolean
-alpm_pkg_has_basename (pmpkg_t *pkg, const gchar *basename)
+alpm_pkg_has_basename (alpm_pkg_t *pkg, const gchar *basename)
 {
 	const alpm_list_t *i;
 
@@ -130,7 +130,7 @@ pk_backend_transaction_download_start (PkBackend *self, const gchar *basename)
 
 	/* figure out what the next package is */
 	for (i = alpm_trans_get_add (alpm); i != NULL; i = i->next) {
-		pmpkg_t *pkg = (pmpkg_t *) i->data;
+		alpm_pkg_t *pkg = (alpm_pkg_t *) i->data;
 
 		if (alpm_pkg_has_basename (pkg, basename)) {
 			dpkg = pkg;
@@ -204,7 +204,7 @@ pk_backend_transaction_dlcb (const gchar *basename, off_t complete, off_t total)
 }
 
 static void
-pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
+pk_backend_transaction_progress_cb (alpm_progress_t type, const gchar *target,
 				    gint percent, gsize targets, gsize current)
 {
 	static gint recent = 101;
@@ -255,7 +255,7 @@ pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
 }
 
 static void
-pk_backend_install_ignorepkg (PkBackend *self, pmpkg_t *pkg, gint *result)
+pk_backend_install_ignorepkg (PkBackend *self, alpm_pkg_t *pkg, gint *result)
 {
 	gchar *output;
 
@@ -282,7 +282,7 @@ pk_backend_install_ignorepkg (PkBackend *self, pmpkg_t *pkg, gint *result)
 }
 
 static void
-pk_backend_select_provider (PkBackend *self, pmdepend_t *dep,
+pk_backend_select_provider (PkBackend *self, alpm_depend_t *dep,
 			    const alpm_list_t *providers)
 {
 	gchar *output;
@@ -300,7 +300,7 @@ pk_backend_select_provider (PkBackend *self, pmdepend_t *dep,
 }
 
 static void
-pk_backend_transaction_conv_cb (pmtransconv_t question, gpointer data1,
+pk_backend_transaction_conv_cb (alpm_question_t question, gpointer data1,
 				gpointer data2, gpointer data3, gint *result)
 {
 	g_return_if_fail (result != NULL);
@@ -351,7 +351,7 @@ pk_backend_output_end (PkBackend *self)
 }
 
 static void
-pk_backend_output_start (PkBackend *self, pmpkg_t *pkg)
+pk_backend_output_start (PkBackend *self, alpm_pkg_t *pkg)
 {
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (pkg != NULL);
@@ -400,7 +400,7 @@ pk_backend_transaction_test_commit (PkBackend *self)
 }
 
 static void
-pk_backend_transaction_add_start (PkBackend *self, pmpkg_t *pkg)
+pk_backend_transaction_add_start (PkBackend *self, alpm_pkg_t *pkg)
 {
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (pkg != NULL);
@@ -411,7 +411,7 @@ pk_backend_transaction_add_start (PkBackend *self, pmpkg_t *pkg)
 }
 
 static void
-pk_backend_transaction_add_done (PkBackend *self, pmpkg_t *pkg)
+pk_backend_transaction_add_done (PkBackend *self, alpm_pkg_t *pkg)
 {
 	const gchar *name, *version;
 	const alpm_list_t *i, *optdepends;
@@ -441,7 +441,7 @@ pk_backend_transaction_add_done (PkBackend *self, pmpkg_t *pkg)
 }
 
 static void
-pk_backend_transaction_remove_start (PkBackend *self, pmpkg_t *pkg)
+pk_backend_transaction_remove_start (PkBackend *self, alpm_pkg_t *pkg)
 {
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (pkg != NULL);
@@ -452,7 +452,7 @@ pk_backend_transaction_remove_start (PkBackend *self, pmpkg_t *pkg)
 }
 
 static void
-pk_backend_transaction_remove_done (PkBackend *self, pmpkg_t *pkg)
+pk_backend_transaction_remove_done (PkBackend *self, alpm_pkg_t *pkg)
 {
 	const gchar *name, *version;
 
@@ -469,8 +469,8 @@ pk_backend_transaction_remove_done (PkBackend *self, pmpkg_t *pkg)
 }
 
 static void
-pk_backend_transaction_upgrade_start (PkBackend *self, pmpkg_t *pkg,
-				      pmpkg_t *old)
+pk_backend_transaction_upgrade_start (PkBackend *self, alpm_pkg_t *pkg,
+				      alpm_pkg_t *old)
 {
 	PkRoleEnum role;
 	PkStatusEnum state;
@@ -495,8 +495,8 @@ pk_backend_transaction_upgrade_start (PkBackend *self, pmpkg_t *pkg,
 }
 
 static void
-pk_backend_transaction_upgrade_done (PkBackend *self, pmpkg_t *pkg,
-				     pmpkg_t *old)
+pk_backend_transaction_upgrade_done (PkBackend *self, alpm_pkg_t *pkg,
+				     alpm_pkg_t *old)
 {
 	const gchar *name, *pre, *post;
 	const alpm_list_t *i;
@@ -533,7 +533,7 @@ pk_backend_transaction_upgrade_done (PkBackend *self, pmpkg_t *pkg,
 }
 
 static void
-pk_backend_transaction_event_cb (pmtransevt_t event, gpointer data,
+pk_backend_transaction_event_cb (alpm_event_t event, gpointer data,
 				 gpointer old)
 {
 	g_return_if_fail (backend != NULL);
@@ -599,7 +599,7 @@ transaction_cancelled_cb (GCancellable *object, gpointer data)
 }
 
 gboolean
-pk_backend_transaction_initialize (PkBackend *self, pmtransflag_t flags,
+pk_backend_transaction_initialize (PkBackend *self, alpm_transflag_t flags,
 				   GError **error)
 {
 	g_return_val_if_fail (self != NULL, FALSE);
@@ -659,7 +659,7 @@ alpm_miss_build_list (const alpm_list_t *i)
 	}
 
 	for (; i != NULL; i = i->next) {
-		pmdepend_t *dep = alpm_miss_get_dep (i->data);
+		alpm_depend_t *dep = alpm_miss_get_dep (i->data);
 		gchar *depend = alpm_dep_compute_string (dep);
 		g_string_append_printf (list, "%s <- %s, ", depend,
 					alpm_miss_get_target (i->data));
diff --git a/backends/alpm/pk-backend-transaction.h b/backends/alpm/pk-backend-transaction.h
index 6bb1d69..e3733d6 100644
--- a/backends/alpm/pk-backend-transaction.h
+++ b/backends/alpm/pk-backend-transaction.h
@@ -25,7 +25,7 @@
 #include <pk-backend.h>
 
 gboolean	 pk_backend_transaction_initialize	(PkBackend *self,
-							 pmtransflag_t flags,
+							 alpm_transflag_t flags,
 							 GError **error);
 
 gboolean	 pk_backend_transaction_simulate	(PkBackend *self,
diff --git a/backends/alpm/pk-backend-update.c b/backends/alpm/pk-backend-update.c
index 96aca29..37ade1e 100644
--- a/backends/alpm/pk-backend-update.c
+++ b/backends/alpm/pk-backend-update.c
@@ -34,7 +34,7 @@
 #include "pk-backend-update.h"
 
 static gchar *
-alpm_pkg_build_replaces (pmpkg_t *pkg)
+alpm_pkg_build_replaces (alpm_pkg_t *pkg)
 {
 	const alpm_list_t *i;
 	GString *string = NULL;
@@ -44,7 +44,7 @@ alpm_pkg_build_replaces (pmpkg_t *pkg)
 
 	/* make a list of the packages that package replaces */
 	for (i = alpm_pkg_get_replaces (pkg); i != NULL; i = i->next) {
-		pmpkg_t *replaces = alpm_db_get_pkg (localdb, i->data);
+		alpm_pkg_t *replaces = alpm_db_get_pkg (localdb, i->data);
 
 		if (replaces != NULL) {
 			gchar *package = alpm_pkg_build_id (replaces);
@@ -65,7 +65,7 @@ alpm_pkg_build_replaces (pmpkg_t *pkg)
 }
 
 static gchar *
-alpm_pkg_build_urls (pmpkg_t *pkg)
+alpm_pkg_build_urls (alpm_pkg_t *pkg)
 {
 	GString *string = g_string_new ("");
 #ifdef ALPM_PACKAGE_URL
@@ -97,7 +97,7 @@ alpm_pkg_build_urls (pmpkg_t *pkg)
 }
 
 static gboolean
-alpm_pkg_same_pkgver (pmpkg_t *a, pmpkg_t *b)
+alpm_pkg_same_pkgver (alpm_pkg_t *a, alpm_pkg_t *b)
 {
 	const gchar *version_a, *version_b, *last_a, *last_b;
 	gsize length_a, length_b;
@@ -145,8 +145,8 @@ pk_backend_get_update_detail_thread (PkBackend *self)
 
 	/* collect details about updates */
 	for (; *packages != NULL; ++packages) {
-		pmpkg_t *pkg, *old;
-		pmdb_t *db;
+		alpm_pkg_t *pkg, *old;
+		alpm_db_t *db;
 
 		gchar *upgrades, *replaces, *urls;
 		const gchar *reason;
@@ -294,7 +294,7 @@ pk_backend_update_databases (PkBackend *self, gint force, GError **error) {
 }
 
 static gboolean
-alpm_pkg_is_ignorepkg (pmpkg_t *pkg)
+alpm_pkg_is_ignorepkg (alpm_pkg_t *pkg)
 {
 	const alpm_list_t *ignorepkgs, *ignoregroups, *i;
 
@@ -317,7 +317,7 @@ alpm_pkg_is_ignorepkg (pmpkg_t *pkg)
 }
 
 static gboolean
-alpm_pkg_is_syncfirst (pmpkg_t *pkg)
+alpm_pkg_is_syncfirst (alpm_pkg_t *pkg)
 {
 	g_return_val_if_fail (pkg != NULL, FALSE);
 
@@ -329,7 +329,7 @@ alpm_pkg_is_syncfirst (pmpkg_t *pkg)
 }
 
 static gboolean
-alpm_pkg_replaces (pmpkg_t *pkg, const gchar *name)
+alpm_pkg_replaces (alpm_pkg_t *pkg, const gchar *name)
 {
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (name != NULL, FALSE);
@@ -338,8 +338,8 @@ alpm_pkg_replaces (pmpkg_t *pkg, const gchar *name)
 }
 
 
-static pmpkg_t *
-alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
+static alpm_pkg_t *
+alpm_pkg_find_update (alpm_pkg_t *pkg, const alpm_list_t *dbs)
 {
 	const gchar *name;
 	const alpm_list_t *i;
@@ -349,7 +349,7 @@ alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
 	name = alpm_pkg_get_name (pkg);
 
 	for (; dbs != NULL; dbs = dbs->next) {
-		pmpkg_t *update = alpm_db_get_pkg (dbs->data, name);
+		alpm_pkg_t *update = alpm_db_get_pkg (dbs->data, name);
 
 		if (update != NULL) {
 			if (alpm_pkg_vercmp (alpm_pkg_get_version (update),
@@ -400,7 +400,7 @@ pk_backend_get_updates_thread (PkBackend *self)
 	/* find outdated and replacement packages */
 	syncdbs = alpm_option_get_syncdbs (alpm);
 	for (i = alpm_db_get_pkgcache (localdb); i != NULL; i = i->next) {
-		pmpkg_t *upgrade = alpm_pkg_find_update (i->data, syncdbs);
+		alpm_pkg_t *upgrade = alpm_pkg_find_update (i->data, syncdbs);
 
 		if (pk_backend_cancelled (self)) {
 			break;
commit 0e859015f9a5d37ca91692b29a47c30e256adf2c
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Wed Oct 26 23:20:16 2011 +1300

    alpm: port function calls to new API

diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index a41dbd9..db494cf 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -39,7 +39,7 @@ typedef struct
 	 gchar		*arch, *cleanmethod, *dbpath, *gpgdir, *logfile, *root,
 			*xfercmd;
 
-	 alpm_list_t	*cachedirs, *holdpkgs, *ignoregrps, *ignorepkgs,
+	 alpm_list_t	*cachedirs, *holdpkgs, *ignoregroups, *ignorepkgs,
 			*noextracts, *noupgrades, *syncfirsts;
 
 	 alpm_list_t	*repos;
@@ -87,7 +87,7 @@ pk_backend_config_free (PkBackendConfig *config)
 
 	FREELIST (config->cachedirs);
 	FREELIST (config->holdpkgs);
-	FREELIST (config->ignoregrps);
+	FREELIST (config->ignoregroups);
 	FREELIST (config->ignorepkgs);
 	FREELIST (config->noextracts);
 	FREELIST (config->noupgrades);
@@ -332,12 +332,12 @@ pk_backend_config_add_holdpkg (PkBackendConfig *config, gchar *package)
 }
 
 static void
-pk_backend_config_add_ignoregrp (PkBackendConfig *config, gchar *group)
+pk_backend_config_add_ignoregroup (PkBackendConfig *config, gchar *group)
 {
 	g_return_if_fail (config != NULL);
 	g_return_if_fail (group != NULL);
 
-	config->ignoregrps = alpm_list_add (config->ignoregrps, group);
+	config->ignoregroups = alpm_list_add (config->ignoregroups, group);
 }
 
 static void
@@ -385,7 +385,7 @@ typedef struct
 /* keep this in alphabetical order */
 static const PkBackendConfigList pk_backend_config_list_options[] = {
 	{ "HoldPkg", pk_backend_config_add_holdpkg },
-	{ "IgnoreGroup", pk_backend_config_add_ignoregrp },
+	{ "IgnoreGroup", pk_backend_config_add_ignoregroup },
 	{ "IgnorePkg", pk_backend_config_add_ignorepkg },
 	{ "NoExtract", pk_backend_config_add_noextract },
 	{ "NoUpgrade", pk_backend_config_add_noupgrade },
@@ -744,8 +744,8 @@ pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 	config->syncfirsts = NULL;
 
 	/* alpm takes ownership */
-	alpm_option_set_ignoregrps (handle, config->ignoregrps);
-	config->ignoregrps = NULL;
+	alpm_option_set_ignoregroups (handle, config->ignoregroups);
+	config->ignoregroups = NULL;
 
 	/* alpm takes ownership */
 	alpm_option_set_ignorepkgs (handle, config->ignorepkgs);
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index 17377d4..76d6f49 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -247,10 +247,11 @@ pk_backend_get_repo_list_thread (PkBackend *self)
 	gpointer key, value;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (disabled != NULL, FALSE);
 
 	/* emit enabled repos */
-	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+	for (i = alpm_option_get_syncdbs (alpm); i != NULL; i = i->next) {
 		pmdb_t *db = (pmdb_t *) i->data;
 		const gchar *repo = alpm_db_get_name (db);
 
@@ -329,13 +330,14 @@ pk_backend_repo_disable_thread (PkBackend *self)
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (disabled != NULL, FALSE);
 
 	repo = pk_backend_get_string (self, "repo_id");
 
 	g_return_val_if_fail (repo != NULL, FALSE);
 
-	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+	for (i = alpm_option_get_syncdbs (alpm); i != NULL; i = i->next) {
 		pmdb_t *db = (pmdb_t *) i->data;
 		const gchar *name = alpm_db_get_name (db);
 
diff --git a/backends/alpm/pk-backend-depends.c b/backends/alpm/pk-backend-depends.c
index 177febe..2585fc6 100644
--- a/backends/alpm/pk-backend-depends.c
+++ b/backends/alpm/pk-backend-depends.c
@@ -55,6 +55,7 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 
 	g_return_val_if_fail (self != NULL, pkgs);
 	g_return_val_if_fail (depend != NULL, pkgs);
+	g_return_val_if_fail (alpm != NULL, pkgs);
 	g_return_val_if_fail (localdb != NULL, pkgs);
 
 	recursive = pk_backend_get_bool (self, "recursive");
@@ -84,8 +85,8 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 	}
 
 	/* look for remote dependencies */
-	syncdbs = alpm_option_get_syncdbs ();
-	provider = alpm_find_dbs_satisfier (syncdbs, depend);
+	syncdbs = alpm_option_get_syncdbs (alpm);
+	provider = alpm_find_dbs_satisfier (alpm, syncdbs, depend);
 
 	if (provider != NULL) {
 		if (!skip_remote) {
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
index 36bbd6e..d500eaf 100644
--- a/backends/alpm/pk-backend-install.c
+++ b/backends/alpm/pk-backend-install.c
@@ -35,12 +35,13 @@ alpm_add_file (const gchar *filename)
 	pmpkg_t *pkg;
 
 	g_return_val_if_fail (filename != NULL, -1);
+	g_return_val_if_fail (alpm != NULL, -1);
 
-	if (alpm_pkg_load (filename, 1, &pkg) < 0) {
+	if (alpm_pkg_load (alpm, filename, 1, &pkg) < 0) {
 		return -1;
 	}
 
-	if (alpm_add_pkg (pkg) < 0) {
+	if (alpm_add_pkg (alpm, pkg) < 0) {
 		alpm_pkg_free (pkg);
 		return -1;
 	}
diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
index 1cc20df..74fe5f6 100644
--- a/backends/alpm/pk-backend-packages.c
+++ b/backends/alpm/pk-backend-packages.c
@@ -77,6 +77,7 @@ pk_backend_find_pkg (PkBackend *self, const gchar *package_id, GError **error)
 
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (package_id != NULL, NULL);
+	g_return_val_if_fail (alpm != NULL, NULL);
 	g_return_val_if_fail (localdb != NULL, NULL);
 
 	package = pk_package_id_split (package_id);
@@ -86,8 +87,8 @@ pk_backend_find_pkg (PkBackend *self, const gchar *package_id, GError **error)
 	if (g_strcmp0 (repo_id, "installed") == 0) {
 		db = localdb;
 	} else {
-		const alpm_list_t *i;
-		for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		const alpm_list_t *i = alpm_option_get_syncdbs (alpm);
+		for (; i != NULL; i = i->next) {
 			const gchar *repo = alpm_db_get_name (i->data);
 
 			if (g_strcmp0 (repo, repo_id) == 0) {
@@ -166,6 +167,7 @@ pk_backend_resolve_name (PkBackend *self, const gchar *name, GError **error)
 
 	g_return_val_if_fail (self != NULL, FALSE);
 	g_return_val_if_fail (name != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
 
 	filters = pk_backend_get_uint (self, "filters");
@@ -180,8 +182,8 @@ pk_backend_resolve_name (PkBackend *self, const gchar *name, GError **error)
 			return TRUE;
 		}
 	} else if (!skip_remote) {
-		const alpm_list_t *i;
-		for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		const alpm_list_t *i = alpm_option_get_syncdbs (alpm);
+		for (; i != NULL; i = i->next) {
 			pkg = alpm_db_get_pkg (i->data, name);
 			if (pkg != NULL) {
 				pk_backend_pkg (self, pkg,
@@ -317,6 +319,7 @@ pk_backend_get_files_thread (PkBackend *self)
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
 	packages = pk_backend_get_strv (self, "package_ids");
 
@@ -324,10 +327,11 @@ pk_backend_get_files_thread (PkBackend *self)
 
 	for (; *packages != NULL; ++packages) {
 		pmpkg_t *pkg;
-		const alpm_list_t *i;
+		const gchar *root;
 
 		GString *files;
-		const gchar *root;
+		alpm_filelist_t *filelist;
+		gsize i;
 
 		if (pk_backend_cancelled (self)) {
 			break;
@@ -338,11 +342,13 @@ pk_backend_get_files_thread (PkBackend *self)
 			break;
 		}
 
+		root = alpm_option_get_root (alpm);
 		files = g_string_new ("");
-		root = alpm_option_get_root ();
-		for (i = alpm_pkg_get_files (pkg); i != NULL; i = i->next) {
-			g_string_append_printf (files, ";%s%s", root,
-						(const gchar *) i->data);
+
+		filelist = alpm_pkg_get_files (pkg);
+		for (i = 0; i < filelist->count; ++i) {
+			const gchar *file = filelist->files[i].name;
+			g_string_append_printf (files, ";%s%s", root, file);
 		}
 
 		pk_backend_files (self, *packages, files->str + 1);
diff --git a/backends/alpm/pk-backend-remove.c b/backends/alpm/pk-backend-remove.c
index f760978..6414c4d 100644
--- a/backends/alpm/pk-backend-remove.c
+++ b/backends/alpm/pk-backend-remove.c
@@ -35,6 +35,7 @@ pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 	gchar **packages;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
 
 	packages = pk_backend_get_strv (self, "package_ids");
@@ -46,7 +47,7 @@ pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
 		pmpkg_t *pkg = alpm_db_get_pkg (localdb, name);
-		if (pkg == NULL || alpm_remove_pkg (pkg) < 0) {
+		if (pkg == NULL || alpm_remove_pkg (alpm, pkg) < 0) {
 			enum _alpm_errno_t errno = alpm_errno (alpm);
 			g_set_error (error, ALPM_ERROR, errno, "%s: %s", name,
 				     alpm_strerror (errno));
@@ -65,11 +66,14 @@ pk_backend_transaction_remove_simulate (PkBackend *self, GError **error)
 {
 	const alpm_list_t *i;
 
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
+
 	if (!pk_backend_transaction_simulate (self, error)) {
 		return FALSE;
 	}
 
-	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
+	for (i = alpm_trans_get_remove (alpm); i != NULL; i = i->next) {
 		const gchar *name = alpm_pkg_get_name (i->data);
 		if (alpm_list_find_str (holdpkgs, name)) {
 			g_set_error (error, ALPM_ERROR, ALPM_ERR_PKG_HELD,
diff --git a/backends/alpm/pk-backend-search.c b/backends/alpm/pk-backend-search.c
index 592472d..bcfa992 100644
--- a/backends/alpm/pk-backend-search.c
+++ b/backends/alpm/pk-backend-search.c
@@ -55,9 +55,10 @@ static gpointer
 pk_backend_pattern_chroot (const gchar *needle, GError **error)
 {
 	g_return_val_if_fail (needle != NULL, NULL);
+	g_return_val_if_fail (alpm != NULL, NULL);
 
 	if (G_IS_DIR_SEPARATOR (*needle)) {
-		const gchar *file = needle, *root = alpm_option_get_root ();
+		const gchar *file = needle, *root = alpm_option_get_root (alpm);
 
 		/* adjust needle to the correct prefix */
 		for (; *file == *root; ++file, ++root) {
@@ -125,30 +126,36 @@ pk_backend_match_details (pmpkg_t *pkg, GRegex *regex)
 static gboolean
 pk_backend_match_file (pmpkg_t *pkg, const gchar *needle)
 {
-	const alpm_list_t *i;
+	alpm_filelist_t *files;
+	gsize i;
 
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (needle != NULL, FALSE);
 
+	files = alpm_pkg_get_files (pkg);
+
 	/* match any file the package contains */
 	if (G_IS_DIR_SEPARATOR (*needle)) {
-		for (i = alpm_pkg_get_files (pkg); i != NULL; i = i->next) {
+		for (i = 0; i < files->count; ++i) {
+			const gchar *file = files->files[i].name;
 			/* match the full path of file */
-			if (g_strcmp0 (i->data, needle + 1) == 0) {
+			if (g_strcmp0 (file, needle + 1) == 0) {
 				return TRUE;
 			}
 		}
 	} else {
-		for (i = alpm_pkg_get_files (pkg); i != NULL; i = i->next) {
-			const gchar *file = strrchr (i->data, G_DIR_SEPARATOR);
-			if (file == NULL) {
-				file = i->data;
+		for (i = 0; i < files->count; ++i) {
+			const gchar *file = files->files[i].name;
+			const gchar *name = strrchr (file, G_DIR_SEPARATOR);
+
+			if (name == NULL) {
+				name = file;
 			} else {
-				++file;
+				++name;
 			}
 
 			/* match the basename of file */
-			if (g_strcmp0 (file, needle) == 0) {
+			if (g_strcmp0 (name, needle) == 0) {
 				return TRUE;
 			}
 		}
@@ -326,6 +333,7 @@ pk_backend_search_thread (PkBackend *self)
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
 
 	needles = pk_backend_get_strv (self, "search");
@@ -366,7 +374,7 @@ pk_backend_search_thread (PkBackend *self)
 		goto out;
 	}
 
-	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+	for (i = alpm_option_get_syncdbs (alpm); i != NULL; i = i->next) {
 		if (pk_backend_cancelled (self)) {
 			break;
 		}
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index ace7f0d..b6fc2c4 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -36,6 +36,7 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 	gchar **packages;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
 	packages = pk_backend_get_strv (self, "package_ids");
 
@@ -46,10 +47,10 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 		gchar *repo = package[PK_PACKAGE_ID_DATA];
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
-		const alpm_list_t *i;
+		const alpm_list_t *i = alpm_option_get_syncdbs (alpm);
 		pmpkg_t *pkg;
 
-		for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+		for (; i != NULL; i = i->next) {
 			if (g_strcmp0 (alpm_db_get_name (i->data), repo) == 0) {
 				break;
 			}
@@ -64,7 +65,7 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 		}
 
 		pkg = alpm_db_get_pkg (i->data, name);
-		if (pkg == NULL || alpm_add_pkg (pkg) < 0) {
+		if (pkg == NULL || alpm_add_pkg (alpm, pkg) < 0) {
 			enum _alpm_errno_t errno = alpm_errno (alpm);
 			g_set_error (error, ALPM_ERROR, errno, "%s/%s: %s",
 				     repo, name, alpm_strerror (errno));
@@ -87,14 +88,18 @@ pk_backend_download_packages_thread (PkBackend *self)
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
 	directory = pk_backend_get_string (self, "directory");
 
 	if (directory != NULL) {
 		/* download files to a PackageKit directory */
 		gchar *cachedir = strdup (directory);
-		cachedirs = alpm_list_strdup (alpm_option_get_cachedirs ());
-		alpm_option_set_cachedirs (alpm_list_add (NULL, cachedir));
+		const alpm_list_t *old = alpm_option_get_cachedirs (alpm);
+		alpm_list_t *new = alpm_list_add (NULL, cachedir);
+
+		cachedirs = alpm_list_strdup (old);
+		alpm_option_set_cachedirs (alpm, new);
 	}
 
 	flags |= ALPM_TRANS_FLAG_NODEPS;
@@ -108,7 +113,7 @@ pk_backend_download_packages_thread (PkBackend *self)
 	}
 
 	if (directory != NULL) {
-		alpm_option_set_cachedirs (cachedirs);
+		alpm_option_set_cachedirs (alpm, cachedirs);
 	}
 
 	return pk_backend_transaction_finish (self, error);
@@ -186,9 +191,10 @@ pk_backend_replaces_dependencies (PkBackend *self, pmpkg_t *pkg)
 
 	g_return_val_if_fail (self != NULL, FALSE);
 	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
 	replaces = alpm_pkg_get_replaces (pkg);
-	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
+	for (i = alpm_trans_get_remove (alpm); i != NULL; i = i->next) {
 		pmpkg_t *rpkg = (pmpkg_t *) i->data;
 		const gchar *rname = alpm_pkg_get_name (rpkg);
 
@@ -214,6 +220,7 @@ pk_backend_update_packages_thread (PkBackend *self)
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
 
 	if (!pk_backend_transaction_initialize (self, 0, &error) ||
@@ -223,7 +230,7 @@ pk_backend_update_packages_thread (PkBackend *self)
 	}
 
 	/* change the install reason of packages that replace dependencies */
-	for (i = alpm_trans_get_add (); i != NULL; i = i->next) {
+	for (i = alpm_trans_get_add (alpm); i != NULL; i = i->next) {
 		pmpkg_t *pkg = (pmpkg_t *) i->data;
 		const gchar *name = alpm_pkg_get_name (pkg);
 
@@ -244,7 +251,8 @@ pk_backend_update_packages_thread (PkBackend *self)
 
 	for (i = asdeps; i != NULL; i = i->next) {
 		const gchar *name = (const gchar *) i->data;
-		alpm_db_set_pkgreason (localdb, name, ALPM_PKG_REASON_DEPEND);
+		pmpkg_t *pkg = alpm_db_get_pkg (localdb, name);
+		alpm_db_set_pkgreason (alpm, pkg, ALPM_PKG_REASON_DEPEND);
 	}
 
 out:
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index 0609bf1..15c706e 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -57,12 +57,13 @@ alpm_pkg_has_basename (pmpkg_t *pkg, const gchar *basename)
 
 	g_return_val_if_fail (pkg != NULL, FALSE);
 	g_return_val_if_fail (basename != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
 	if (g_strcmp0 (alpm_pkg_get_filename (pkg), basename) == 0) {
 		return TRUE;
 	}
 
-	if (alpm_option_get_usedelta () == 0) {
+	if (alpm_option_get_usedelta (alpm) == 0) {
 		return FALSE;
 	}
 
@@ -109,6 +110,7 @@ pk_backend_transaction_download_start (PkBackend *self, const gchar *basename)
 
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (basename != NULL);
+	g_return_if_fail (alpm != NULL);
 
 	/* continue or finish downloading the current package */
 	if (dpkg != NULL) {
@@ -127,7 +129,7 @@ pk_backend_transaction_download_start (PkBackend *self, const gchar *basename)
 	}
 
 	/* figure out what the next package is */
-	for (i = alpm_trans_get_add (); i != NULL; i = i->next) {
+	for (i = alpm_trans_get_add (alpm); i != NULL; i = i->next) {
 		pmpkg_t *pkg = (pmpkg_t *) i->data;
 
 		if (alpm_pkg_has_basename (pkg, basename)) {
@@ -416,11 +418,12 @@ pk_backend_transaction_add_done (PkBackend *self, pmpkg_t *pkg)
 
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (pkg != NULL);
+	g_return_if_fail (alpm != NULL);
 
 	name = alpm_pkg_get_name (pkg);
 	version = alpm_pkg_get_version (pkg);
 
-	alpm_logaction ("installed %s (%s)\n", name, version);
+	alpm_logaction (alpm, "installed %s (%s)\n", name, version);
 	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
 
 	optdepends = alpm_pkg_get_optdepends (pkg);
@@ -455,11 +458,12 @@ pk_backend_transaction_remove_done (PkBackend *self, pmpkg_t *pkg)
 
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (pkg != NULL);
+	g_return_if_fail (alpm != NULL);
 
 	name = alpm_pkg_get_name (pkg);
 	version = alpm_pkg_get_version (pkg);
 
-	alpm_logaction ("removed %s (%s)\n", name, version);
+	alpm_logaction (alpm, "removed %s (%s)\n", name, version);
 	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
 	pk_backend_output_end (self);
 }
@@ -501,12 +505,13 @@ pk_backend_transaction_upgrade_done (PkBackend *self, pmpkg_t *pkg,
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (pkg != NULL);
 	g_return_if_fail (old != NULL);
+	g_return_if_fail (alpm != NULL);
 
 	name = alpm_pkg_get_name (pkg);
 	pre = alpm_pkg_get_version (old);
 	post = alpm_pkg_get_version (pkg);
 
-	alpm_logaction ("upgraded %s (%s -> %s)\n", name, pre, post);
+	alpm_logaction (alpm, "upgraded %s (%s -> %s)\n", name, pre, post);
 	pk_backend_pkg (self, pkg, PK_INFO_ENUM_FINISHED);
 
 	optdepends = alpm_list_diff (alpm_pkg_get_optdepends (pkg),
@@ -588,8 +593,9 @@ static void
 transaction_cancelled_cb (GCancellable *object, gpointer data)
 {
 	g_return_if_fail (data != NULL);
+	g_return_if_fail (alpm != NULL);
 
-	alpm_trans_interrupt ();
+	alpm_trans_interrupt (alpm);
 }
 
 gboolean
@@ -597,19 +603,22 @@ pk_backend_transaction_initialize (PkBackend *self, pmtransflag_t flags,
 				   GError **error)
 {
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (cancellable != NULL, FALSE);
 
-	if (alpm_trans_init (flags, pk_backend_transaction_event_cb,
-			     pk_backend_transaction_conv_cb,
-			     pk_backend_transaction_progress_cb) < 0) {
+	if (alpm_trans_init (alpm, flags) < 0) {
 		enum _alpm_errno_t errno = alpm_errno (alpm);
 		g_set_error_literal (error, ALPM_ERROR, errno,
 				     alpm_strerror (errno));
 		return FALSE;
 	}
 
-	alpm_option_set_dlcb (pk_backend_transaction_dlcb);
-	alpm_option_set_totaldlcb (pk_backend_transaction_totaldlcb);
+	alpm_option_set_eventcb (alpm, pk_backend_transaction_event_cb);
+	alpm_option_set_questioncb (alpm, pk_backend_transaction_conv_cb);
+	alpm_option_set_progresscb (alpm, pk_backend_transaction_progress_cb);
+
+	alpm_option_set_dlcb (alpm, pk_backend_transaction_dlcb);
+	alpm_option_set_totaldlcb (alpm, pk_backend_transaction_totaldlcb);
 
 	g_cancellable_connect (cancellable,
 			       G_CALLBACK (transaction_cancelled_cb),
@@ -772,7 +781,10 @@ pk_backend_transaction_simulate (PkBackend *self, GError **error)
 	alpm_list_t *data = NULL;
 	gchar *prefix;
 
-	if (alpm_trans_prepare (&data) >= 0) {
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
+
+	if (alpm_trans_prepare (alpm, &data) >= 0) {
 		return TRUE;
 	}
 
@@ -830,10 +842,11 @@ pk_backend_transaction_packages (PkBackend *self)
 	PkInfoEnum info;
 
 	g_return_if_fail (self != NULL);
+	g_return_if_fail (alpm != NULL);
 	g_return_if_fail (localdb != NULL);
 
 	/* emit packages that would have been installed */
-	for (i = alpm_trans_get_add (); i != NULL; i = i->next) {
+	for (i = alpm_trans_get_add (alpm); i != NULL; i = i->next) {
 		if (pk_backend_cancelled (self)) {
 			break;
 		} else {
@@ -860,7 +873,7 @@ pk_backend_transaction_packages (PkBackend *self)
 	}
 
 	/* emit packages that would have been removed */
-	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
+	for (i = alpm_trans_get_remove (alpm); i != NULL; i = i->next) {
 		if (pk_backend_cancelled (self)) {
 			break;
 		} else {
@@ -894,6 +907,9 @@ pk_backend_transaction_commit (PkBackend *self, GError **error)
 	alpm_list_t *data = NULL;
 	gchar *prefix;
 
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
+
 	if (pk_backend_cancelled (self)) {
 		return TRUE;
 	}
@@ -901,7 +917,7 @@ pk_backend_transaction_commit (PkBackend *self, GError **error)
 	pk_backend_set_allow_cancel (self, FALSE);
 	pk_backend_set_status (self, PK_STATUS_ENUM_RUNNING);
 
-	if (alpm_trans_commit (&data) >= 0) {
+	if (alpm_trans_commit (alpm, &data) >= 0) {
 		return TRUE;
 	}
 
@@ -945,9 +961,14 @@ gboolean
 pk_backend_transaction_end (PkBackend *self, GError **error)
 {
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
+
+	alpm_option_set_eventcb (alpm, NULL);
+	alpm_option_set_questioncb (alpm, NULL);
+	alpm_option_set_progresscb (alpm, NULL);
 
-	alpm_option_set_dlcb (NULL);
-	alpm_option_set_totaldlcb (NULL);
+	alpm_option_set_dlcb (alpm, NULL);
+	alpm_option_set_totaldlcb (alpm, NULL);
 
 	if (dpkg != NULL) {
 		pk_backend_transaction_download_end (self);
@@ -956,7 +977,7 @@ pk_backend_transaction_end (PkBackend *self, GError **error)
 		pk_backend_output_end (self);
 	}
 
-	if (alpm_trans_release () < 0) {
+	if (alpm_trans_release (alpm) < 0) {
 		enum _alpm_errno_t errno = alpm_errno (alpm);
 		g_set_error_literal (error, ALPM_ERROR, errno,
 				     alpm_strerror (errno));
diff --git a/backends/alpm/pk-backend-update.c b/backends/alpm/pk-backend-update.c
index ef3d9d7..96aca29 100644
--- a/backends/alpm/pk-backend-update.c
+++ b/backends/alpm/pk-backend-update.c
@@ -245,18 +245,19 @@ pk_backend_update_databases (PkBackend *self, gint force, GError **error) {
 	const alpm_list_t *i;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
 	if (!pk_backend_transaction_initialize (self, 0, error)) {
 		return FALSE;
 	}
 
-	alpm_logaction ("synchronizing package lists\n");
+	alpm_logaction (alpm, "synchronizing package lists\n");
 
-	dlcb = alpm_option_get_dlcb ();
-	totaldlcb = alpm_option_get_totaldlcb ();
+	dlcb = alpm_option_get_dlcb (alpm);
+	totaldlcb = alpm_option_get_totaldlcb (alpm);
 
 	/* set total size to minus the number of databases */
-	i = alpm_option_get_syncdbs ();
+	i = alpm_option_get_syncdbs (alpm);
 	totaldlcb (-alpm_list_count (i));
 
 	for (; i != NULL; i = i->next) {
@@ -295,18 +296,19 @@ pk_backend_update_databases (PkBackend *self, gint force, GError **error) {
 static gboolean
 alpm_pkg_is_ignorepkg (pmpkg_t *pkg)
 {
-	const alpm_list_t *ignorepkgs, *ignoregrps, *i;
+	const alpm_list_t *ignorepkgs, *ignoregroups, *i;
 
 	g_return_val_if_fail (pkg != NULL, TRUE);
+	g_return_val_if_fail (alpm != NULL, TRUE);
 
-	ignorepkgs = alpm_option_get_ignorepkgs ();
+	ignorepkgs = alpm_option_get_ignorepkgs (alpm);
 	if (alpm_list_find_str (ignorepkgs, alpm_pkg_get_name (pkg)) != NULL) {
 		return TRUE;
 	}
 
-	ignoregrps = alpm_option_get_ignoregrps ();
+	ignoregroups = alpm_option_get_ignoregroups (alpm);
 	for (i = alpm_pkg_get_groups (pkg); i != NULL; i = i->next) {
-		if (alpm_list_find_str (ignoregrps, i->data) != NULL) {
+		if (alpm_list_find_str (ignoregroups, i->data) != NULL) {
 			return TRUE;
 		}
 	}
@@ -326,6 +328,16 @@ alpm_pkg_is_syncfirst (pmpkg_t *pkg)
 	return FALSE;
 }
 
+static gboolean
+alpm_pkg_replaces (pmpkg_t *pkg, const gchar *name)
+{
+	g_return_val_if_fail (pkg != NULL, FALSE);
+	g_return_val_if_fail (name != NULL, FALSE);
+
+	return alpm_list_find_str (alpm_pkg_get_replaces (pkg), name) != NULL;
+}
+
+
 static pmpkg_t *
 alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
 {
@@ -350,8 +362,7 @@ alpm_pkg_find_update (pmpkg_t *pkg, const alpm_list_t *dbs)
 
 		i = alpm_db_get_pkgcache (dbs->data);
 		for (; i != NULL; i = i->next) {
-			if (alpm_list_find_str (alpm_pkg_get_replaces (i->data),
-						name) != NULL) {
+			if (alpm_pkg_replaces (i->data, name)) {
 				return i->data;
 			}
 		}
@@ -368,6 +379,7 @@ pk_backend_get_updates_thread (PkBackend *self)
 	const alpm_list_t *i, *syncdbs;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 	g_return_val_if_fail (localdb != NULL, FALSE);
 
 	time (&one_hour_ago);
@@ -386,7 +398,7 @@ pk_backend_get_updates_thread (PkBackend *self)
 	}
 
 	/* find outdated and replacement packages */
-	syncdbs = alpm_option_get_syncdbs ();
+	syncdbs = alpm_option_get_syncdbs (alpm);
 	for (i = alpm_db_get_pkgcache (localdb); i != NULL; i = i->next) {
 		pmpkg_t *upgrade = alpm_pkg_find_update (i->data, syncdbs);
 
commit 074de85e467170ae56570ecd5bd2d388dc85a149
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Wed Oct 26 22:44:37 2011 +1300

    alpm: port enum constants to new API

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 2637d79..1e6d732 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -178,12 +178,12 @@ pk_backend_logcb (pmloglevel_t level, const gchar *format, va_list args)
 
 	/* report important output to PackageKit */
 	switch (level) {
-		case PM_LOG_DEBUG:
-		case PM_LOG_FUNCTION:
+		case ALPM_LOG_DEBUG:
+		case ALPM_LOG_FUNCTION:
 			g_debug ("%s", output);
 			break;
 
-		case PM_LOG_WARNING:
+		case ALPM_LOG_WARNING:
 			g_warning ("%s", output);
 			pk_backend_output (backend, output);
 			break;
diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index bcc64bc..a41dbd9 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -471,7 +471,7 @@ pk_backend_config_repo_add_server (PkBackendConfig *config, const gchar *repo,
 			return FALSE;
 		}
 	} else if (strstr (url, "$arch") != NULL) {
-		g_set_error (e, ALPM_ERROR, PM_ERR_CONFIG_INVALID,
+		g_set_error (e, ALPM_ERROR, ALPM_ERR_CONFIG_INVALID,
 			     "url contained $arch, which is not set");
 	}
 
@@ -535,7 +535,7 @@ pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
 
 			if (*str == '\0') {
 				g_set_error (&e, ALPM_ERROR,
-					     PM_ERR_CONFIG_INVALID,
+					     ALPM_ERR_CONFIG_INVALID,
 					     "empty section name");
 				break;
 			}
@@ -552,7 +552,7 @@ pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
 
 		/* parse a directive */
 		if (section == NULL) {
-			g_set_error (&e, ALPM_ERROR, PM_ERR_CONFIG_INVALID,
+			g_set_error (&e, ALPM_ERROR, ALPM_ERR_CONFIG_INVALID,
 				     "directive must belong to a section");
 			break;
 		}
@@ -612,7 +612,7 @@ pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
 		}
 
 		/* report errors from above */
-		g_set_error (&e, ALPM_ERROR, PM_ERR_CONFIG_INVALID,
+		g_set_error (&e, ALPM_ERROR, ALPM_ERR_CONFIG_INVALID,
 			     "unrecognised directive '%s'", key);
 		break;
 	}
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index ef31e53..17377d4 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -306,7 +306,7 @@ pk_backend_repo_enable_thread (PkBackend *self)
 			pk_backend_repo_list_changed (self);
 		}
 	} else {
-		int code = PM_ERR_DB_NOT_NULL;
+		int code = ALPM_ERR_DB_NOT_NULL;
 		g_set_error (&error, ALPM_ERROR, code, "[%s]: %s",
 			     repo, alpm_strerror (code));
 	}
@@ -354,7 +354,7 @@ pk_backend_repo_disable_thread (PkBackend *self)
 	}
 
 	if (i == NULL) {
-		int code = PM_ERR_DB_NULL;
+		int code = ALPM_ERR_DB_NULL;
 		g_set_error (&error, ALPM_ERROR, code, "[%s]: %s", repo,
 			     alpm_strerror (code));
 	}
diff --git a/backends/alpm/pk-backend-depends.c b/backends/alpm/pk-backend-depends.c
index 8bb8567..177febe 100644
--- a/backends/alpm/pk-backend-depends.c
+++ b/backends/alpm/pk-backend-depends.c
@@ -96,7 +96,7 @@ pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs,
 			pkgs = alpm_list_add (pkgs, provider);
 		}
 	} else {
-		int code = PM_ERR_UNSATISFIED_DEPS;
+		int code = ALPM_ERR_UNSATISFIED_DEPS;
 		g_set_error (error, ALPM_ERROR, code, "%s: %s", depend,
 			     alpm_strerror (code));
 	}
@@ -127,7 +127,7 @@ pk_backend_find_requirer (PkBackend *self, alpm_list_t *pkgs, const gchar *name,
 			pkgs = alpm_list_add (pkgs, requirer);
 		}
 	} else {
-		int code = PM_ERR_PKG_NOT_FOUND;
+		int code = ALPM_ERR_PKG_NOT_FOUND;
 		g_set_error (error, ALPM_ERROR, code, "%s: %s", name,
 			     alpm_strerror (code));
 	}
diff --git a/backends/alpm/pk-backend-error.c b/backends/alpm/pk-backend-error.c
index ac8fd17..2f34232 100644
--- a/backends/alpm/pk-backend-error.c
+++ b/backends/alpm/pk-backend-error.c
@@ -39,145 +39,145 @@ pk_backend_error (PkBackend *self, GError *error)
 	}
 
 	switch (error->code) {
-		case PM_ERR_MEMORY:
-		case PM_ERR_SYSTEM:
+		case ALPM_ERR_MEMORY:
+		case ALPM_ERR_SYSTEM:
 			code = PK_ERROR_ENUM_OOM;
 			break;
 
-		case PM_ERR_BADPERMS:
+		case ALPM_ERR_BADPERMS:
 			code = PK_ERROR_ENUM_NOT_AUTHORIZED;
 			break;
 
-		case PM_ERR_NOT_A_FILE:
-		case PM_ERR_NOT_A_DIR:
+		case ALPM_ERR_NOT_A_FILE:
+		case ALPM_ERR_NOT_A_DIR:
 			code = PK_ERROR_ENUM_FILE_NOT_FOUND;
 			break;
 
-		case PM_ERR_WRONG_ARGS:
-		case PM_ERR_HANDLE_NULL:
-		case PM_ERR_DB_NULL:
-		case PM_ERR_TRANS_NULL:
-		case PM_ERR_TRANS_NOT_INITIALIZED:
-		case PM_ERR_TRANS_NOT_PREPARED:
-		case PM_ERR_TRANS_NOT_LOCKED:
-		case PM_ERR_INVALID_REGEX:
+		case ALPM_ERR_WRONG_ARGS:
+		case ALPM_ERR_HANDLE_NULL:
+		case ALPM_ERR_DB_NULL:
+		case ALPM_ERR_TRANS_NULL:
+		case ALPM_ERR_TRANS_NOT_INITIALIZED:
+		case ALPM_ERR_TRANS_NOT_PREPARED:
+		case ALPM_ERR_TRANS_NOT_LOCKED:
+		case ALPM_ERR_INVALID_REGEX:
 			code = PK_ERROR_ENUM_INTERNAL_ERROR;
 			break;
 
-		case PM_ERR_DISK_SPACE:
+		case ALPM_ERR_DISK_SPACE:
 			code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
 			break;
 
-		case PM_ERR_HANDLE_NOT_NULL:
-		case PM_ERR_DB_NOT_NULL:
-		case PM_ERR_TRANS_NOT_NULL:
+		case ALPM_ERR_HANDLE_NOT_NULL:
+		case ALPM_ERR_DB_NOT_NULL:
+		case ALPM_ERR_TRANS_NOT_NULL:
 			code = PK_ERROR_ENUM_FAILED_INITIALIZATION;
 			break;
 
-		case PM_ERR_HANDLE_LOCK:
+		case ALPM_ERR_HANDLE_LOCK:
 			code = PK_ERROR_ENUM_CANNOT_GET_LOCK;
 			break;
 
-		case PM_ERR_DB_OPEN:
-		case PM_ERR_DB_NOT_FOUND:
-		case PM_ERR_PKG_REPO_NOT_FOUND:
+		case ALPM_ERR_DB_OPEN:
+		case ALPM_ERR_DB_NOT_FOUND:
+		case ALPM_ERR_PKG_REPO_NOT_FOUND:
 			code = PK_ERROR_ENUM_REPO_NOT_FOUND;
 			break;
 
-		case PM_ERR_DB_CREATE:
+		case ALPM_ERR_DB_CREATE:
 			code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
 			break;
 
-		case PM_ERR_DB_VERSION:
-		case PM_ERR_DB_REMOVE:
-		case PM_ERR_SERVER_BAD_URL:
-		case PM_ERR_SIG_MISSINGDIR:
+		case ALPM_ERR_DB_VERSION:
+		case ALPM_ERR_DB_REMOVE:
+		case ALPM_ERR_SERVER_BAD_URL:
+		case ALPM_ERR_SIG_MISSINGDIR:
 			code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
 			break;
 
-		case PM_ERR_DB_WRITE:
+		case ALPM_ERR_DB_WRITE:
 			code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
 			break;
 
-		case PM_ERR_SERVER_NONE:
+		case ALPM_ERR_SERVER_NONE:
 			code = PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY;
 			break;
 
-		case PM_ERR_TRANS_DUP_TARGET:
-		case PM_ERR_TRANS_ABORT:
+		case ALPM_ERR_TRANS_DUP_TARGET:
+		case ALPM_ERR_TRANS_ABORT:
 			code = PK_ERROR_ENUM_TRANSACTION_ERROR;
 			break;
 
-		case PM_ERR_TRANS_TYPE:
+		case ALPM_ERR_TRANS_TYPE:
 			code = PK_ERROR_ENUM_CANNOT_CANCEL;
 			break;
 
-		case PM_ERR_PKG_NOT_FOUND:
+		case ALPM_ERR_PKG_NOT_FOUND:
 			code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
 			break;
 
-		case PM_ERR_PKG_IGNORED:
+		case ALPM_ERR_PKG_IGNORED:
 			code = PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED;
 			break;
 
-		case PM_ERR_PKG_INVALID:
-		case PM_ERR_PKG_OPEN:
-		case PM_ERR_PKG_INVALID_NAME:
-		case PM_ERR_DLT_INVALID:
+		case ALPM_ERR_PKG_INVALID:
+		case ALPM_ERR_PKG_OPEN:
+		case ALPM_ERR_PKG_INVALID_NAME:
+		case ALPM_ERR_DLT_INVALID:
 			code = PK_ERROR_ENUM_INVALID_PACKAGE_FILE;
 			break;
 
-		case PM_ERR_PKG_CANT_REMOVE:
+		case ALPM_ERR_PKG_CANT_REMOVE:
 			code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE;
 			break;
 
-		case PM_ERR_PKG_INVALID_ARCH:
+		case ALPM_ERR_PKG_INVALID_ARCH:
 			code = PK_ERROR_ENUM_INCOMPATIBLE_ARCHITECTURE;
 			break;
 
-		case PM_ERR_SIG_INVALID:
+		case ALPM_ERR_SIG_INVALID:
 			code = PK_ERROR_ENUM_BAD_GPG_SIGNATURE;
 			break;
 
-		case PM_ERR_SIG_UNKNOWN:
+		case ALPM_ERR_SIG_UNKNOWN:
 			code = PK_ERROR_ENUM_MISSING_GPG_SIGNATURE;
 			break;
 
-		case PM_ERR_DLT_PATCHFAILED:
+		case ALPM_ERR_DLT_PATCHFAILED:
 			code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_BUILD;
 			break;
 
-		case PM_ERR_UNSATISFIED_DEPS:
+		case ALPM_ERR_UNSATISFIED_DEPS:
 			code = PK_ERROR_ENUM_DEP_RESOLUTION_FAILED;
 			break;
 
-		case PM_ERR_CONFLICTING_DEPS:
+		case ALPM_ERR_CONFLICTING_DEPS:
 			code = PK_ERROR_ENUM_PACKAGE_CONFLICTS;
 			break;
 
-		case PM_ERR_FILE_CONFLICTS:
+		case ALPM_ERR_FILE_CONFLICTS:
 			code = PK_ERROR_ENUM_FILE_CONFLICTS;
 			break;
 
-		case PM_ERR_RETRIEVE:
-		case PM_ERR_LIBCURL:
-		case PM_ERR_EXTERNAL_DOWNLOAD:
+		case ALPM_ERR_RETRIEVE:
+		case ALPM_ERR_LIBCURL:
+		case ALPM_ERR_EXTERNAL_DOWNLOAD:
 			code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
 			break;
 
-		case PM_ERR_LIBARCHIVE:
+		case ALPM_ERR_LIBARCHIVE:
 			code = PK_ERROR_ENUM_LOCAL_INSTALL_FAILED;
 			break;
 
-		case PM_ERR_GPGME:
+		case ALPM_ERR_GPGME:
 			code = PK_ERROR_ENUM_GPG_FAILURE;
 			break;
 
-		case PM_ERR_CONFIG_INVALID:
+		case ALPM_ERR_CONFIG_INVALID:
 			code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
 			break;
 
-		case PM_ERR_PKG_HELD:
+		case ALPM_ERR_PKG_HELD:
 			code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
 			break;
 	}
diff --git a/backends/alpm/pk-backend-error.h b/backends/alpm/pk-backend-error.h
index 83fe4a5..0a029e4 100644
--- a/backends/alpm/pk-backend-error.h
+++ b/backends/alpm/pk-backend-error.h
@@ -26,8 +26,8 @@
 #define	 ALPM_ERROR		(alpm_error_quark ())
 
 enum {
-	PM_ERR_CONFIG_INVALID = 0x10000,
-	PM_ERR_PKG_HELD
+	ALPM_ERR_CONFIG_INVALID = 0x10000,
+	ALPM_ERR_PKG_HELD
 };
 
 void	 pk_backend_error	(PkBackend *self, GError *error);
diff --git a/backends/alpm/pk-backend-packages.c b/backends/alpm/pk-backend-packages.c
index e9a7c94..1cc20df 100644
--- a/backends/alpm/pk-backend-packages.c
+++ b/backends/alpm/pk-backend-packages.c
@@ -111,7 +111,7 @@ pk_backend_find_pkg (PkBackend *self, const gchar *package_id, GError **error)
 	}
 
 	if (pkg == NULL) {
-		int code = PM_ERR_PKG_NOT_FOUND;
+		int code = ALPM_ERR_PKG_NOT_FOUND;
 		g_set_error (error, ALPM_ERROR, code, "%s: %s", package_id,
 			     alpm_strerror (code));
 	}
@@ -191,7 +191,7 @@ pk_backend_resolve_name (PkBackend *self, const gchar *name, GError **error)
 		}
 	}
 
-	code = PM_ERR_PKG_NOT_FOUND;
+	code = ALPM_ERR_PKG_NOT_FOUND;
 	g_set_error (error, ALPM_ERROR, code, "%s: %s", name,
 		     alpm_strerror (code));
 	return FALSE;
diff --git a/backends/alpm/pk-backend-remove.c b/backends/alpm/pk-backend-remove.c
index 0a6c06a..f760978 100644
--- a/backends/alpm/pk-backend-remove.c
+++ b/backends/alpm/pk-backend-remove.c
@@ -72,7 +72,7 @@ pk_backend_transaction_remove_simulate (PkBackend *self, GError **error)
 	for (i = alpm_trans_get_remove (); i != NULL; i = i->next) {
 		const gchar *name = alpm_pkg_get_name (i->data);
 		if (alpm_list_find_str (holdpkgs, name)) {
-			g_set_error (error, ALPM_ERROR, PM_ERR_PKG_HELD,
+			g_set_error (error, ALPM_ERROR, ALPM_ERR_PKG_HELD,
 				     "%s: %s", name,
 				     "could not remove HoldPkg");
 			return FALSE;
@@ -85,14 +85,14 @@ pk_backend_transaction_remove_simulate (PkBackend *self, GError **error)
 static gboolean
 pk_backend_simulate_remove_packages_thread (PkBackend *self)
 {
-	pmtransflag_t flags = PM_TRANS_FLAG_CASCADE;
+	pmtransflag_t flags = ALPM_TRANS_FLAG_CASCADE;
 	GError *error = NULL;
 
 	g_return_val_if_fail (self != NULL, FALSE);
 
 	/* remove unneeded packages that were required by those to be removed */
 	if (pk_backend_get_bool (self, "autoremove")) {
-		flags |= PM_TRANS_FLAG_RECURSE;
+		flags |= ALPM_TRANS_FLAG_RECURSE;
 	}
 
 	if (pk_backend_transaction_initialize (self, flags, &error) &&
@@ -114,11 +114,11 @@ pk_backend_remove_packages_thread (PkBackend *self)
 
 	/* remove packages that depend on those to be removed */
 	if (pk_backend_get_bool (self, "allow_deps")) {
-		flags |= PM_TRANS_FLAG_CASCADE;
+		flags |= ALPM_TRANS_FLAG_CASCADE;
 	}
 	/* remove unneeded packages that were required by those to be removed */
 	if (pk_backend_get_bool (self, "autoremove")) {
-		flags |= PM_TRANS_FLAG_RECURSE;
+		flags |= ALPM_TRANS_FLAG_RECURSE;
 	}
 
 	if (pk_backend_transaction_initialize (self, flags, &error) &&
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index 40b4018..ace7f0d 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -56,7 +56,7 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 		}
 
 		if (i == NULL) {
-			enum _alpm_errno_t errno = PM_ERR_DB_NOT_FOUND;
+			enum _alpm_errno_t errno = ALPM_ERR_DB_NOT_FOUND;
 			g_set_error (error, ALPM_ERROR, errno, "%s/%s: %s",
 				     repo, name, alpm_strerror (errno));
 			g_strfreev (package);
@@ -97,9 +97,9 @@ pk_backend_download_packages_thread (PkBackend *self)
 		alpm_option_set_cachedirs (alpm_list_add (NULL, cachedir));
 	}
 
-	flags |= PM_TRANS_FLAG_NODEPS;
-	flags |= PM_TRANS_FLAG_NOCONFLICTS;
-	flags |= PM_TRANS_FLAG_DOWNLOADONLY;
+	flags |= ALPM_TRANS_FLAG_NODEPS;
+	flags |= ALPM_TRANS_FLAG_NOCONFLICTS;
+	flags |= ALPM_TRANS_FLAG_DOWNLOADONLY;
 
 	if (pk_backend_transaction_initialize (self, flags, &error) &&
 	    pk_backend_transaction_sync_targets (self, &error) &&
@@ -198,7 +198,7 @@ pk_backend_replaces_dependencies (PkBackend *self, pmpkg_t *pkg)
 			continue;
 		}
 
-		if (alpm_pkg_get_reason (rpkg) == PM_PKG_REASON_EXPLICIT) {
+		if (alpm_pkg_get_reason (rpkg) == ALPM_PKG_REASON_EXPLICIT) {
 			return FALSE;
 		}
 	}
@@ -244,7 +244,7 @@ pk_backend_update_packages_thread (PkBackend *self)
 
 	for (i = asdeps; i != NULL; i = i->next) {
 		const gchar *name = (const gchar *) i->data;
-		alpm_db_set_pkgreason (localdb, name, PM_PKG_REASON_DEPEND);
+		alpm_db_set_pkgreason (localdb, name, ALPM_PKG_REASON_DEPEND);
 	}
 
 out:
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index ef65c15..0609bf1 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -209,9 +209,9 @@ pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
 	gsize overall = percent + (current - 1) * 100;
 
 	/* TODO: revert when fixed upstream */
-	if (type == PM_TRANS_PROGRESS_CONFLICTS_START ||
-	    type == PM_TRANS_PROGRESS_DISKSPACE_START ||
-	    type == PM_TRANS_PROGRESS_INTEGRITY_START) {
+	if (type == ALPM_PROGRESS_CONFLICTS_START ||
+	    type == ALPM_PROGRESS_DISKSPACE_START ||
+	    type == ALPM_PROGRESS_INTEGRITY_START) {
 		if (current < targets) {
 			overall = percent + current++ * 100;
 		}
@@ -228,12 +228,12 @@ pk_backend_transaction_progress_cb (pmtransprog_t type, const gchar *target,
 
 	/* update transaction progress */
 	switch (type) {
-		case PM_TRANS_PROGRESS_ADD_START:
-		case PM_TRANS_PROGRESS_UPGRADE_START:
-		case PM_TRANS_PROGRESS_REMOVE_START:
-		case PM_TRANS_PROGRESS_CONFLICTS_START:
-		case PM_TRANS_PROGRESS_DISKSPACE_START:
-		case PM_TRANS_PROGRESS_INTEGRITY_START:
+		case ALPM_PROGRESS_ADD_START:
+		case ALPM_PROGRESS_UPGRADE_START:
+		case ALPM_PROGRESS_REMOVE_START:
+		case ALPM_PROGRESS_CONFLICTS_START:
+		case ALPM_PROGRESS_DISKSPACE_START:
+		case ALPM_PROGRESS_INTEGRITY_START:
 			if (percent == recent) {
 				break;
 			}
@@ -305,25 +305,25 @@ pk_backend_transaction_conv_cb (pmtransconv_t question, gpointer data1,
 	g_return_if_fail (backend != NULL);
 
 	switch (question) {
-		case PM_TRANS_CONV_INSTALL_IGNOREPKG:
+		case ALPM_QUESTION_INSTALL_IGNOREPKG:
 			pk_backend_install_ignorepkg (backend, data1, result);
 			break;
 
-		case PM_TRANS_CONV_REPLACE_PKG:
-		case PM_TRANS_CONV_CONFLICT_PKG:
-		case PM_TRANS_CONV_CORRUPTED_PKG:
-		case PM_TRANS_CONV_LOCAL_NEWER:
+		case ALPM_QUESTION_REPLACE_PKG:
+		case ALPM_QUESTION_CONFLICT_PKG:
+		case ALPM_QUESTION_CORRUPTED_PKG:
+		case ALPM_QUESTION_LOCAL_NEWER:
 			/* these actions are mostly harmless */
 			g_debug ("safe question %d", question);
 			*result = 1;
 			break;
 
-		case PM_TRANS_CONV_REMOVE_PKGS:
+		case ALPM_QUESTION_REMOVE_PKGS:
 			g_debug ("unsafe question %d", question);
 			*result = 0;
 			break;
 
-		case PM_TRANS_CONV_SELECT_PROVIDER:
+		case ALPM_QUESTION_SELECT_PROVIDER:
 			pk_backend_select_provider (backend, data1, data2);
 			*result = 0;
 			break;
@@ -535,46 +535,46 @@ pk_backend_transaction_event_cb (pmtransevt_t event, gpointer data,
 
 	/* figure out the backend status and package info */
 	switch (event) {
-		case PM_TRANS_EVT_CHECKDEPS_START:
-		case PM_TRANS_EVT_RESOLVEDEPS_START:
+		case ALPM_EVENT_CHECKDEPS_START:
+		case ALPM_EVENT_RESOLVEDEPS_START:
 			pk_backend_transaction_dep_resolve (backend);
 			break;
 
-		case PM_TRANS_EVT_FILECONFLICTS_START:
-		case PM_TRANS_EVT_INTERCONFLICTS_START:
-		case PM_TRANS_EVT_INTEGRITY_START:
-		case PM_TRANS_EVT_DELTA_INTEGRITY_START:
-		case PM_TRANS_EVT_DISKSPACE_START:
+		case ALPM_EVENT_FILECONFLICTS_START:
+		case ALPM_EVENT_INTERCONFLICTS_START:
+		case ALPM_EVENT_INTEGRITY_START:
+		case ALPM_EVENT_DELTA_INTEGRITY_START:
+		case ALPM_EVENT_DISKSPACE_START:
 			pk_backend_transaction_test_commit (backend);
 			break;
 
-		case PM_TRANS_EVT_ADD_START:
+		case ALPM_EVENT_ADD_START:
 			pk_backend_transaction_add_start (backend, data);
 			break;
 
-		case PM_TRANS_EVT_ADD_DONE:
+		case ALPM_EVENT_ADD_DONE:
 			pk_backend_transaction_add_done (backend, data);
 			break;
 
-		case PM_TRANS_EVT_REMOVE_START:
+		case ALPM_EVENT_REMOVE_START:
 			pk_backend_transaction_remove_start (backend, data);
 			break;
 
-		case PM_TRANS_EVT_REMOVE_DONE:
+		case ALPM_EVENT_REMOVE_DONE:
 			pk_backend_transaction_remove_done (backend, data);
 			break;
 
-		case PM_TRANS_EVT_UPGRADE_START:
+		case ALPM_EVENT_UPGRADE_START:
 			pk_backend_transaction_upgrade_start (backend, data,
 							      old);
 			break;
 
-		case PM_TRANS_EVT_UPGRADE_DONE:
+		case ALPM_EVENT_UPGRADE_DONE:
 			pk_backend_transaction_upgrade_done (backend, data,
 							     old);
 			break;
 
-		case PM_TRANS_EVT_SCRIPTLET_INFO:
+		case ALPM_EVENT_SCRIPTLET_INFO:
 			pk_backend_output (backend, data);
 			break;
 
@@ -777,24 +777,24 @@ pk_backend_transaction_simulate (PkBackend *self, GError **error)
 	}
 
 	switch (alpm_errno (alpm)) {
-		case PM_ERR_PKG_INVALID_ARCH:
+		case ALPM_ERR_PKG_INVALID_ARCH:
 			prefix = alpm_pkg_build_list (data);
 			alpm_list_free (data);
 			break;
 
-		case PM_ERR_UNSATISFIED_DEPS:
+		case ALPM_ERR_UNSATISFIED_DEPS:
 			prefix = alpm_miss_build_list (data);
 			alpm_list_free_inner (data, alpm_miss_free);
 			alpm_list_free (data);
 			break;
 
-		case PM_ERR_CONFLICTING_DEPS:
+		case ALPM_ERR_CONFLICTING_DEPS:
 			prefix = alpm_conflict_build_list (data);
 			alpm_list_free_inner (data, alpm_conflict_free);
 			alpm_list_free (data);
 			break;
 
-		case PM_ERR_FILE_CONFLICTS:
+		case ALPM_ERR_FILE_CONFLICTS:
 			prefix = alpm_fileconflict_build_list (data);
 			alpm_list_free_inner (data, alpm_fileconflict_free);
 			alpm_list_free (data);
@@ -906,14 +906,14 @@ pk_backend_transaction_commit (PkBackend *self, GError **error)
 	}
 
 	switch (alpm_errno (alpm)) {
-		case PM_ERR_FILE_CONFLICTS:
+		case ALPM_ERR_FILE_CONFLICTS:
 			prefix = alpm_fileconflict_build_list (data);
 			alpm_list_free_inner (data, alpm_fileconflict_free);
 			alpm_list_free (data);
 			break;
 
-		case PM_ERR_PKG_INVALID:
-		case PM_ERR_DLT_INVALID:
+		case ALPM_ERR_PKG_INVALID:
+		case ALPM_ERR_DLT_INVALID:
 			prefix = alpm_string_build_list (data);
 			alpm_list_free (data);
 			break;
commit 972ceed5c01349abbeb3a5a5aefdda2a5181bd8f
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Wed Oct 26 22:38:18 2011 +1300

    alpm: port error messagess to new API

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 827199d..2637d79 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -224,8 +224,9 @@ pk_backend_initialize_alpm (PkBackend *self, GError **error)
 
 	localdb = alpm_option_get_localdb (alpm);
 	if (localdb == NULL) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s", "local",
-			     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error (error, ALPM_ERROR, errno, "[%s]: %s", "local",
+			     alpm_strerror (errno));
 	}
 
 	return TRUE;
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index b483fbc..ef31e53 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -341,9 +341,10 @@ pk_backend_repo_disable_thread (PkBackend *self)
 
 		if (g_strcmp0 (repo, name) == 0) {
 			if (alpm_db_unregister (db) < 0) {
-				g_set_error (&error, ALPM_ERROR, pm_errno,
+				enum _alpm_errno_t errno = alpm_errno (alpm);
+				g_set_error (&error, ALPM_ERROR, errno,
 					     "[%s]: %s", repo,
-					     alpm_strerrorlast ());
+					     alpm_strerror (errno));
 			} else {
 				g_hash_table_insert (disabled, g_strdup (repo),
 						     GINT_TO_POINTER (1));
diff --git a/backends/alpm/pk-backend-install.c b/backends/alpm/pk-backend-install.c
index 65a6c11..36bbd6e 100644
--- a/backends/alpm/pk-backend-install.c
+++ b/backends/alpm/pk-backend-install.c
@@ -61,8 +61,9 @@ pk_backend_transaction_add_targets (PkBackend *self, GError **error)
 
 	for (; *paths != NULL; ++paths) {
 		if (alpm_add_file (*paths) < 0) {
-			g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s",
-				     *paths, alpm_strerrorlast ());
+			enum _alpm_errno_t errno = alpm_errno (alpm);
+			g_set_error (error, ALPM_ERROR, errno, "%s: %s",
+				     *paths, alpm_strerror (errno));
 			return FALSE;
 		}
 	}
diff --git a/backends/alpm/pk-backend-remove.c b/backends/alpm/pk-backend-remove.c
index 03329b1..0a6c06a 100644
--- a/backends/alpm/pk-backend-remove.c
+++ b/backends/alpm/pk-backend-remove.c
@@ -29,29 +29,13 @@
 #include "pk-backend-remove.h"
 #include "pk-backend-transaction.h"
 
-static gint
-alpm_remove_local (const gchar *name)
-{
-	pmpkg_t *pkg;
-
-	g_return_val_if_fail (name != NULL, -1);
-	g_return_val_if_fail (localdb != NULL, -1);
-
-	pkg = alpm_db_get_pkg (localdb, name);
-	if (pkg == NULL) {
-		pm_errno = PM_ERR_PKG_NOT_FOUND;
-		return -1;
-	}
-
-	return alpm_remove_pkg (pkg);
-}
-
 static gboolean
 pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 {
 	gchar **packages;
 
 	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (localdb != NULL, FALSE);
 
 	packages = pk_backend_get_strv (self, "package_ids");
 
@@ -61,9 +45,11 @@ pk_backend_transaction_remove_targets (PkBackend *self, GError **error)
 		gchar **package = pk_package_id_split (*packages);
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
-		if (alpm_remove_local (name) < 0) {
-			g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s",
-				     name, alpm_strerrorlast ());
+		pmpkg_t *pkg = alpm_db_get_pkg (localdb, name);
+		if (pkg == NULL || alpm_remove_pkg (pkg) < 0) {
+			enum _alpm_errno_t errno = alpm_errno (alpm);
+			g_set_error (error, ALPM_ERROR, errno, "%s: %s", name,
+				     alpm_strerror (errno));
 			g_strfreev (package);
 			return FALSE;
 		}
diff --git a/backends/alpm/pk-backend-sync.c b/backends/alpm/pk-backend-sync.c
index 9e1e02b..40b4018 100644
--- a/backends/alpm/pk-backend-sync.c
+++ b/backends/alpm/pk-backend-sync.c
@@ -30,35 +30,6 @@
 #include "pk-backend-sync.h"
 #include "pk-backend-transaction.h"
 
-static gint
-alpm_add_dbtarget (const gchar *repo, const gchar *name)
-{
-	const alpm_list_t *i;
-	pmpkg_t *pkg;
-
-	g_return_val_if_fail (repo != NULL, -1);
-	g_return_val_if_fail (name != NULL, -1);
-
-	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
-		if (g_strcmp0 (alpm_db_get_name (i->data), repo) == 0) {
-			break;
-		}
-	}
-
-	if (i == NULL) {
-		pm_errno = PM_ERR_DB_NOT_FOUND;
-		return -1;
-	}
-
-	pkg = alpm_db_get_pkg (i->data, name);
-	if (pkg == NULL) {
-		pm_errno = PM_ERR_PKG_NOT_FOUND;
-		return -1;
-	}
-
-	return alpm_add_pkg (pkg);
-}
-
 static gboolean
 pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 {
@@ -75,9 +46,28 @@ pk_backend_transaction_sync_targets (PkBackend *self, GError **error)
 		gchar *repo = package[PK_PACKAGE_ID_DATA];
 		gchar *name = package[PK_PACKAGE_ID_NAME];
 
-		if (alpm_add_dbtarget (repo, name) < 0) {
-			g_set_error (error, ALPM_ERROR, pm_errno, "%s/%s: %s",
-				     repo, name, alpm_strerrorlast ());
+		const alpm_list_t *i;
+		pmpkg_t *pkg;
+
+		for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
+			if (g_strcmp0 (alpm_db_get_name (i->data), repo) == 0) {
+				break;
+			}
+		}
+
+		if (i == NULL) {
+			enum _alpm_errno_t errno = PM_ERR_DB_NOT_FOUND;
+			g_set_error (error, ALPM_ERROR, errno, "%s/%s: %s",
+				     repo, name, alpm_strerror (errno));
+			g_strfreev (package);
+			return FALSE;
+		}
+
+		pkg = alpm_db_get_pkg (i->data, name);
+		if (pkg == NULL || alpm_add_pkg (pkg) < 0) {
+			enum _alpm_errno_t errno = alpm_errno (alpm);
+			g_set_error (error, ALPM_ERROR, errno, "%s/%s: %s",
+				     repo, name, alpm_strerror (errno));
 			g_strfreev (package);
 			return FALSE;
 		}
diff --git a/backends/alpm/pk-backend-transaction.c b/backends/alpm/pk-backend-transaction.c
index fdb840e..ef65c15 100644
--- a/backends/alpm/pk-backend-transaction.c
+++ b/backends/alpm/pk-backend-transaction.c
@@ -602,8 +602,9 @@ pk_backend_transaction_initialize (PkBackend *self, pmtransflag_t flags,
 	if (alpm_trans_init (flags, pk_backend_transaction_event_cb,
 			     pk_backend_transaction_conv_cb,
 			     pk_backend_transaction_progress_cb) < 0) {
-		g_set_error_literal (error, ALPM_ERROR, pm_errno,
-				     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error_literal (error, ALPM_ERROR, errno,
+				     alpm_strerror (errno));
 		return FALSE;
 	}
 
@@ -775,7 +776,7 @@ pk_backend_transaction_simulate (PkBackend *self, GError **error)
 		return TRUE;
 	}
 
-	switch (pm_errno) {
+	switch (alpm_errno (alpm)) {
 		case PM_ERR_PKG_INVALID_ARCH:
 			prefix = alpm_pkg_build_list (data);
 			alpm_list_free (data);
@@ -802,18 +803,21 @@ pk_backend_transaction_simulate (PkBackend *self, GError **error)
 		default:
 			prefix = NULL;
 			if (data != NULL) {
-				g_warning ("unhandled error %d", pm_errno);
+				g_warning ("unhandled error %d",
+					   alpm_errno (alpm));
 			}
 			break;
 	}
 
 	if (prefix != NULL) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s", prefix,
-			     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error (error, ALPM_ERROR, errno, "%s: %s", prefix,
+			     alpm_strerror (errno));
 		g_free (prefix);
 	} else {
-		g_set_error_literal (error, ALPM_ERROR, pm_errno,
-				     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error_literal (error, ALPM_ERROR, errno,
+				     alpm_strerror (errno));
 	}
 
 	return FALSE;
@@ -901,7 +905,7 @@ pk_backend_transaction_commit (PkBackend *self, GError **error)
 		return TRUE;
 	}
 
-	switch (pm_errno) {
+	switch (alpm_errno (alpm)) {
 		case PM_ERR_FILE_CONFLICTS:
 			prefix = alpm_fileconflict_build_list (data);
 			alpm_list_free_inner (data, alpm_fileconflict_free);
@@ -917,18 +921,21 @@ pk_backend_transaction_commit (PkBackend *self, GError **error)
 		default:
 			prefix = NULL;
 			if (data != NULL) {
-				g_warning ("unhandled error %d", pm_errno);
+				g_warning ("unhandled error %d",
+					   alpm_errno (alpm));
 			}
 			break;
 	}
 
 	if (prefix != NULL) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "%s: %s", prefix,
-			     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error (error, ALPM_ERROR, errno, "%s: %s", prefix,
+			     alpm_strerror (errno));
 		g_free (prefix);
 	} else {
-		g_set_error_literal (error, ALPM_ERROR, pm_errno,
-				     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error_literal (error, ALPM_ERROR, errno,
+				     alpm_strerror (errno));
 	}
 
 	return FALSE;
@@ -950,8 +957,9 @@ pk_backend_transaction_end (PkBackend *self, GError **error)
 	}
 
 	if (alpm_trans_release () < 0) {
-		g_set_error_literal (error, ALPM_ERROR, pm_errno,
-				     alpm_strerrorlast ());
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error_literal (error, ALPM_ERROR, errno,
+				     alpm_strerror (errno));
 		return FALSE;
 	}
 
diff --git a/backends/alpm/pk-backend-update.c b/backends/alpm/pk-backend-update.c
index a281953..ef3d9d7 100644
--- a/backends/alpm/pk-backend-update.c
+++ b/backends/alpm/pk-backend-update.c
@@ -274,9 +274,10 @@ pk_backend_update_databases (PkBackend *self, gint force, GError **error) {
 			/* fake the download when already up to date */
 			dlcb ("", 1, 1);
 		} else if (result < 0) {
-			g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s",
+			enum _alpm_errno_t errno = alpm_errno (alpm);
+			g_set_error (error, ALPM_ERROR, errno, "[%s]: %s",
 				     alpm_db_get_name (i->data),
-				     alpm_strerrorlast ());
+				     alpm_strerror (errno));
 			break;
 		}
 	}
commit f6a73d2bb4fba0707ce7034d96763221f0f46700
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Wed Oct 26 22:11:22 2011 +1300

    alpm: port configuration logic to new API

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index c3591b9..827199d 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -26,6 +26,7 @@
 #include <sys/utsname.h>
 
 #include "pk-backend-alpm.h"
+#include "pk-backend-config.h"
 #include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 #include "pk-backend-groups.h"
@@ -35,6 +36,7 @@ PkBackend *backend = NULL;
 GCancellable *cancellable = NULL;
 static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
 
+alpm_handle_t *alpm = NULL;
 pmdb_t *localdb = NULL;
 
 gchar *xfercmd = NULL;
@@ -212,27 +214,20 @@ pk_backend_initialize_alpm (PkBackend *self, GError **error)
 	g_setenv ("HTTP_USER_AGENT", user_agent, FALSE);
 	g_free (user_agent);
 
-	g_debug ("initializing");
-	if (alpm_initialize () < 0) {
-		g_set_error_literal (error, ALPM_ERROR, pm_errno,
-				     alpm_strerrorlast ());
+	alpm = pk_backend_configure (PK_BACKEND_CONFIG_FILE, error);
+	if (alpm == NULL) {
 		return FALSE;
 	}
 
 	backend = self;
-	localdb = alpm_option_get_localdb ();
+	alpm_option_set_logcb (alpm, pk_backend_logcb);
+
+	localdb = alpm_option_get_localdb (alpm);
 	if (localdb == NULL) {
 		g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s", "local",
 			     alpm_strerrorlast ());
 	}
 
-	/* set some sane defaults */
-	alpm_option_set_logcb (pk_backend_logcb);
-	alpm_option_set_root (PK_BACKEND_DEFAULT_ROOT);
-	alpm_option_set_dbpath (PK_BACKEND_DEFAULT_DBPATH);
-	alpm_option_set_signaturedir (PK_BACKEND_DEFAULT_GPGDIR);
-	alpm_option_set_logfile (PK_BACKEND_DEFAULT_LOGFILE);
-
 	return TRUE;
 }
 
@@ -241,17 +236,20 @@ pk_backend_destroy_alpm (PkBackend *self)
 {
 	g_return_if_fail (self != NULL);
 
-	if (backend != NULL) {
-		if (alpm_trans_get_flags () != -1) {
-			alpm_trans_release ();
+	if (alpm != NULL) {
+		if (alpm_trans_get_flags (alpm) != -1) {
+			alpm_trans_release (alpm);
 		}
-		alpm_release ();
+		alpm_release (alpm);
+
+		alpm = NULL;
 		backend = NULL;
 	}
 
 	FREELIST (syncfirsts);
 	FREELIST (holdpkgs);
 	g_free (xfercmd);
+	xfercmd = NULL;
 }
 
 void
diff --git a/backends/alpm/pk-backend-alpm.h b/backends/alpm/pk-backend-alpm.h
index 23a2724..7cdd8ce 100644
--- a/backends/alpm/pk-backend-alpm.h
+++ b/backends/alpm/pk-backend-alpm.h
@@ -28,6 +28,7 @@
 extern PkBackend *backend;
 extern GCancellable *cancellable;
 
+extern alpm_handle_t *alpm;
 extern pmdb_t *localdb;
 
 extern gchar *xfercmd;
diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index a7d9efd..bcc64bc 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -28,19 +28,23 @@
 
 #include "pk-backend-alpm.h"
 #include "pk-backend-config.h"
+#include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 
-typedef struct {
-	gboolean checkspace, ilovecandy, showsize, totaldl, usedelta, usesyslog;
+typedef struct
+{
+	 gboolean	 checkspace, ilovecandy, showsize, totaldl, usedelta,
+			 usesyslog;
 
-	gchar *arch, *cleanmethod, *dbpath, *gpgdir, *logfile, *root, *xfercmd;
+	 gchar		*arch, *cleanmethod, *dbpath, *gpgdir, *logfile, *root,
+			*xfercmd;
 
-	alpm_list_t *cachedirs, *holdpkgs, *ignoregrps, *ignorepkgs,
-		    *noextracts, *noupgrades, *syncfirsts;
+	 alpm_list_t	*cachedirs, *holdpkgs, *ignoregrps, *ignorepkgs,
+			*noextracts, *noupgrades, *syncfirsts;
 
-	alpm_list_t *repos;
-	GHashTable *servers;
-	GRegex *xrepo, *xarch;
+	 alpm_list_t	*repos;
+	 GHashTable	*servers;
+	 GRegex		*xrepo, *xarch;
 } PkBackendConfig;
 
 static PkBackendConfig *
@@ -145,9 +149,10 @@ pk_backend_config_set_usesyslog (PkBackendConfig *config)
 	config->usesyslog = TRUE;
 }
 
-typedef struct {
-	const gchar *name;
-	void (*func) (PkBackendConfig *config);
+typedef struct
+{
+	 const gchar	*name;
+	 void		(*func) (PkBackendConfig *config);
 } PkBackendConfigBoolean;
 
 /* keep this in alphabetical order */
@@ -275,9 +280,10 @@ pk_backend_config_set_xfercmd (PkBackendConfig *config, const gchar *command)
 	config->xfercmd = g_strdup (command);
 }
 
-typedef struct {
-	const gchar *name;
-	void (*func) (PkBackendConfig *config, const gchar *s);
+typedef struct
+{
+	 const gchar	*name;
+	 void		(*func) (PkBackendConfig *config, const gchar *s);
 } PkBackendConfigString;
 
 /* keep this in alphabetical order */
@@ -370,9 +376,10 @@ pk_backend_config_add_syncfirst (PkBackendConfig *config, gchar *package)
 	config->syncfirsts = alpm_list_add (config->syncfirsts, package);
 }
 
-typedef struct {
-	const gchar *name;
-	void (*func) (PkBackendConfig *config, gchar *value);
+typedef struct
+{
+	const gchar	*name;
+	void		(*func) (PkBackendConfig *config, gchar *value);
 } PkBackendConfigList;
 
 /* keep this in alphabetical order */
@@ -624,119 +631,96 @@ pk_backend_config_parse (PkBackendConfig *config, const gchar *filename,
 	}
 }
 
-static gboolean
-pk_backend_config_configure_paths (PkBackendConfig *config, GError **error)
+static alpm_handle_t *
+pk_backend_config_initialize_alpm (PkBackendConfig *config, GError **error)
 {
+	alpm_handle_t *handle;
+	enum _alpm_errno_t errno;
+	gsize dir = 1;
+
 	g_return_val_if_fail (config != NULL, FALSE);
 
-	if (config->root == NULL) {
+	if (config->root == NULL || *config->root == '\0') {
 		config->root = g_strdup (PK_BACKEND_DEFAULT_ROOT);
-	}
-
-	if (alpm_option_set_root (config->root) < 0) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "RootDir: %s",
-			     alpm_strerrorlast ());
-		return FALSE;
+	} else if (!g_str_has_suffix (config->root, G_DIR_SEPARATOR_S)) {
+		dir = 0;
 	}
 
 	if (config->dbpath == NULL) {
-		config->dbpath = g_strconcat (alpm_option_get_root (),
-					      PK_BACKEND_DEFAULT_DBPATH + 1,
+		config->dbpath = g_strconcat (config->root,
+					      PK_BACKEND_DEFAULT_DBPATH + dir,
 					      NULL);
 	}
 
-	if (alpm_option_set_dbpath (config->dbpath) < 0) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "DBPath: %s",
-			     alpm_strerrorlast ());
-		return FALSE;
+	g_debug ("initializing alpm");
+	handle = alpm_initialize (config->root, config->dbpath, &errno);
+	if (handle == NULL) {
+		g_set_error_literal (error, ALPM_ERROR, errno,
+				     alpm_strerror (errno));
+		return handle;
 	}
 
 	if (config->gpgdir == NULL) {
-		config->gpgdir = g_strconcat (alpm_option_get_root (),
-					      PK_BACKEND_DEFAULT_GPGDIR + 1,
+		config->gpgdir = g_strconcat (config->root,
+					      PK_BACKEND_DEFAULT_GPGDIR + dir,
 					      NULL);
 	}
 
-	if (alpm_option_set_signaturedir (config->gpgdir) < 0) {
-		g_set_error (error, ALPM_ERROR, pm_errno, "GPGDir: %s",
-			     alpm_strerrorlast ());
-		return FALSE;
+	if (alpm_option_set_gpgdir (handle, config->gpgdir) < 0) {
+		errno = alpm_errno (handle);
+		g_set_error (error, ALPM_ERROR, errno, "GPGDir: %s",
+			     alpm_strerror (errno));
+		return handle;
 	}
 
 	if (config->logfile == NULL) {
-		config->logfile = g_strconcat (alpm_option_get_root (),
-					       PK_BACKEND_DEFAULT_LOGFILE + 1,
+		config->logfile = g_strconcat (config->root,
+					       PK_BACKEND_DEFAULT_LOGFILE + dir,
 					       NULL);
 	}
 
-	alpm_option_set_logfile (config->logfile);
+	if (alpm_option_set_logfile (handle, config->logfile) < 0) {
+		errno = alpm_errno (handle);
+		g_set_error (error, ALPM_ERROR, errno, "LogFile: %s",
+			     alpm_strerror (errno));
+		return handle;
+	}
 
 	if (config->cachedirs == NULL) {
-		gchar *path = g_strconcat (alpm_option_get_root (),
-					   PK_BACKEND_DEFAULT_CACHEDIR + 1,
+		gchar *path = g_strconcat (config->root,
+					   PK_BACKEND_DEFAULT_CACHEDIR + dir,
 					   NULL);
 		config->cachedirs = alpm_list_add (NULL, path);
 	}
 
 	/* alpm takes ownership */
-	alpm_option_set_cachedirs (config->cachedirs);
-	config->cachedirs = NULL;
-
-	return TRUE;
-}
-
-static gboolean
-pk_backend_config_configure_repos (PkBackendConfig *config, GError **error)
-{
-	const alpm_list_t *i;
-
-	g_return_val_if_fail (config != NULL, FALSE);
-
-	for (i = alpm_option_get_syncdbs (); i != NULL; i = i->next) {
-		if (alpm_db_unregister (i->data) < 0) {
-			g_set_error_literal (error, ALPM_ERROR, pm_errno,
-					     alpm_strerrorlast ());
-			return FALSE;
-		}
-	}
-
-	for (i = config->repos; i != NULL; i = i->next) {
-		const gchar *key;
-		gpointer value;
-		pmdb_t *db;
-		alpm_list_t *j;
-
-		key = (const gchar *) i->data;
-		value = g_hash_table_lookup (config->servers, key);
-
-		db = alpm_db_register_sync (key);
-		if (db == NULL) {
-			g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s",
-				     key, alpm_strerrorlast ());
-			return FALSE;
-		}
-
-		for (j = (alpm_list_t *) value; j != NULL; j = j->next) {
-			alpm_db_setserver (db, (const gchar *) j->data);
-		}
+	if (alpm_option_set_cachedirs (handle, config->cachedirs) < 0) {
+		errno = alpm_errno (handle);
+		g_set_error (error, ALPM_ERROR, errno, "CacheDir: %s",
+			     alpm_strerror (errno));
+		return handle;
 	}
+	config->cachedirs = NULL;
 
-	return TRUE;
+	return handle;
 }
 
-static gboolean
+static alpm_handle_t *
 pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 {
+	alpm_handle_t *handle;
+
 	g_return_val_if_fail (config != NULL, FALSE);
 
-	if (!pk_backend_config_configure_paths (config, error)) {
-		return FALSE;
+	handle = pk_backend_config_initialize_alpm (config, error);
+	if (handle == NULL) {
+		return NULL;
 	}
 
-	alpm_option_set_checkspace (config->checkspace);
-	alpm_option_set_usedelta (config->usedelta);
-	alpm_option_set_usesyslog (config->usesyslog);
-	alpm_option_set_arch (config->arch);
+	alpm_option_set_checkspace (handle, config->checkspace);
+	alpm_option_set_usedelta (handle, config->usedelta);
+	alpm_option_set_usesyslog (handle, config->usesyslog);
+	alpm_option_set_arch (handle, config->arch);
 
 	/* backend takes ownership */
 	g_free (xfercmd);
@@ -744,9 +728,9 @@ pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 	config->xfercmd = NULL;
 
 	if (xfercmd != NULL) {
-		alpm_option_set_fetchcb (pk_backend_fetchcb);
+		alpm_option_set_fetchcb (handle, pk_backend_fetchcb);
 	} else {
-		alpm_option_set_fetchcb (NULL);
+		alpm_option_set_fetchcb (handle, NULL);
 	}
 
 	/* backend takes ownership */
@@ -760,41 +744,52 @@ pk_backend_config_configure_alpm (PkBackendConfig *config, GError **error)
 	config->syncfirsts = NULL;
 
 	/* alpm takes ownership */
-	alpm_option_set_ignoregrps (config->ignoregrps);
+	alpm_option_set_ignoregrps (handle, config->ignoregrps);
 	config->ignoregrps = NULL;
 
 	/* alpm takes ownership */
-	alpm_option_set_ignorepkgs (config->ignorepkgs);
+	alpm_option_set_ignorepkgs (handle, config->ignorepkgs);
 	config->ignorepkgs = NULL;
 
 	/* alpm takes ownership */
-	alpm_option_set_noextracts (config->noextracts);
+	alpm_option_set_noextracts (handle, config->noextracts);
 	config->noextracts = NULL;
 
 	/* alpm takes ownership */
-	alpm_option_set_noupgrades (config->noupgrades);
+	alpm_option_set_noupgrades (handle, config->noupgrades);
 	config->noupgrades = NULL;
 
-	if (!pk_backend_config_configure_repos (config, error)) {
-		return FALSE;
-	}
+	pk_backend_configure_repos (config->repos, config->servers);
 
-	return TRUE;
+	return handle;
 }
 
-gboolean
+alpm_handle_t *
 pk_backend_configure (const gchar *filename, GError **error)
 {
 	PkBackendConfig *config;
-	gboolean result;
+	alpm_handle_t *handle;
+	GError *e = NULL;
 
 	g_return_val_if_fail (filename != NULL, FALSE);
 
+	g_debug ("reading config from %s", filename);
 	config = pk_backend_config_new ();
 
-	result = pk_backend_config_parse (config, filename, NULL, error) &&
-		 pk_backend_config_configure_alpm (config, error);
+	if (pk_backend_config_parse (config, filename, NULL, &e)) {
+		handle = pk_backend_config_configure_alpm (config, &e);
+	} else {
+		handle = NULL;
+	}
 
 	pk_backend_config_free (config);
-	return result;
+	if (e != NULL) {
+		g_propagate_error (error, e);
+		if (handle != NULL) {
+			alpm_release (handle);
+		}
+		return NULL;
+	} else {
+		return handle;
+	}
 }
diff --git a/backends/alpm/pk-backend-config.h b/backends/alpm/pk-backend-config.h
index cb8b8dc..412f59c 100644
--- a/backends/alpm/pk-backend-config.h
+++ b/backends/alpm/pk-backend-config.h
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#include <alpm.h>
 #include <glib.h>
 
-gboolean	 pk_backend_configure	(const gchar *filename, GError **error);
+alpm_handle_t	*pk_backend_configure	(const gchar *filename, GError **error);
diff --git a/backends/alpm/pk-backend-databases.c b/backends/alpm/pk-backend-databases.c
index f6ab06e..b483fbc 100644
--- a/backends/alpm/pk-backend-databases.c
+++ b/backends/alpm/pk-backend-databases.c
@@ -26,7 +26,14 @@
 #include "pk-backend-databases.h"
 #include "pk-backend-error.h"
 
+typedef struct
+{
+	gchar *name;
+	alpm_list_t *servers;
+} PkBackendRepo;
+
 static GHashTable *disabled = NULL;
+static alpm_list_t *configured = NULL;
 
 static GHashTable *
 disabled_repos_new (GError **error)
@@ -113,8 +120,8 @@ disabled_repos_free (GHashTable *table)
 
 	/* write all disabled repos line by line */
 	while (g_hash_table_iter_next (&iter, (gpointer *) &line, NULL) &&
-		g_data_output_stream_put_string (output, line, NULL, NULL) &&
-		g_data_output_stream_put_byte (output, '\n', NULL, NULL));
+	       g_data_output_stream_put_string (output, line, NULL, NULL) &&
+	       g_data_output_stream_put_byte (output, '\n', NULL, NULL));
 
 	g_object_unref (output);
 	g_object_unref (os);
@@ -128,37 +135,57 @@ disabled_repos_configure (GHashTable *table, GError **error)
 {
 	const alpm_list_t *i;
 
-	g_debug ("reading config from %s", PK_BACKEND_CONFIG_FILE);
+	g_return_val_if_fail (table != NULL, FALSE);
+	g_return_val_if_fail (alpm != NULL, FALSE);
 
-	/* read configuration from pacman.conf file */
-	if (!pk_backend_configure (PK_BACKEND_CONFIG_FILE, error)) {
+	if (alpm_db_unregister_all (alpm) < 0) {
+		enum _alpm_errno_t errno = alpm_errno (alpm);
+		g_set_error_literal (error, ALPM_ERROR, errno,
+				     alpm_strerror (errno));
 		return FALSE;
 	}
 
-	/* disable disabled repos */
-	for (i = alpm_option_get_syncdbs (); i != NULL;) {
-		pmdb_t *db = (pmdb_t *) i->data;
-		const gchar *repo = alpm_db_get_name (db);
+	for (i = configured; i != NULL; i = i->next) {
+		PkBackendRepo *repo = (PkBackendRepo *) i->data;
+		pmdb_t *db;
 
-		if (g_hash_table_lookup (table, repo) == NULL) {
-			/* repo is not disabled */
-			i = i->next;
+		if (g_hash_table_lookup (table, repo->name) != NULL) {
+			/* repo is disabled */
 			continue;
 		}
 
-		if (alpm_db_unregister (db) < 0) {
-			g_set_error (error, ALPM_ERROR, pm_errno, "[%s]: %s",
-				     repo, alpm_strerrorlast ());
+		db = alpm_db_register_sync (alpm, repo->name);
+		if (db == NULL) {
+			enum _alpm_errno_t errno = alpm_errno (alpm);
+			g_set_error (error, ALPM_ERROR, errno, "[%s]: %s",
+				     repo->name, alpm_strerror (errno));
 			return FALSE;
 		}
 
-		/* start again because the list gets invalidated */
-		i = alpm_option_get_syncdbs ();
+		alpm_db_set_servers (db, alpm_list_strdup (repo->servers));
 	}
 
 	return TRUE;
 }
 
+void
+pk_backend_configure_repos (alpm_list_t *repos, GHashTable *servers)
+{
+	alpm_list_t *i;
+
+	g_return_if_fail (servers != NULL);
+
+	for (i = repos; i != NULL; i = i->next) {
+		PkBackendRepo *repo = g_new (PkBackendRepo, 1);
+		gpointer value = g_hash_table_lookup (servers, i->data);
+
+		repo->name = g_strdup ((const gchar *) i->data);
+		repo->servers = alpm_list_strdup ((alpm_list_t *) value);
+
+		configured = alpm_list_add (configured, repo);
+	}
+}
+
 gboolean
 pk_backend_initialize_databases (PkBackend *self, GError **error)
 {
@@ -179,11 +206,21 @@ pk_backend_initialize_databases (PkBackend *self, GError **error)
 void
 pk_backend_destroy_databases (PkBackend *self)
 {
+	alpm_list_t *i;
+
 	g_return_if_fail (self != NULL);
 
 	if (disabled != NULL) {
 		disabled_repos_free (disabled);
 	}
+
+	for (i = configured; i != NULL; i = i->next) {
+		PkBackendRepo *repo = (PkBackendRepo *) i->data;
+		g_free (repo->name);
+		FREELIST (repo->servers);
+		g_free (repo);
+	}
+	alpm_list_free (configured);
 }
 
 static gboolean
diff --git a/backends/alpm/pk-backend-databases.h b/backends/alpm/pk-backend-databases.h
index f9eb2f9..ea825f2 100644
--- a/backends/alpm/pk-backend-databases.h
+++ b/backends/alpm/pk-backend-databases.h
@@ -24,6 +24,9 @@
 #include <alpm.h>
 #include <pk-backend.h>
 
+void		 pk_backend_configure_repos		(alpm_list_t *repos,
+							 GHashTable *servers);
+
 gboolean	 pk_backend_initialize_databases	(PkBackend *self,
 							 GError **error);
 
commit fcfe0fb1e51187df0f770601a2318af0303654f2
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Wed Oct 26 19:51:31 2011 +1300

    alpm: add GPGDir config option

diff --git a/backends/alpm/Makefile.am b/backends/alpm/Makefile.am
index 5a5468a..d8c3dfc 100644
--- a/backends/alpm/Makefile.am
+++ b/backends/alpm/Makefile.am
@@ -5,6 +5,7 @@ PK_BACKEND_REPO_FILE = $(confdir)/repos.list
 PK_BACKEND_DEFAULT_PATH = "/bin:/usr/bin:/sbin:/usr/sbin"
 PK_BACKEND_DEFAULT_ROOT = "/"
 PK_BACKEND_DEFAULT_DBPATH = $(localstatedir)/lib/pacman/
+PK_BACKEND_DEFAULT_GPGDIR = $(sysconfdir)/pacman.d/gnupg/
 PK_BACKEND_DEFAULT_CACHEDIR = $(localstatedir)/cache/pacman/pkg/
 PK_BACKEND_DEFAULT_LOGFILE = $(localstatedir)/log/pacman.log
 
@@ -17,6 +18,7 @@ DEFS = -DPK_BACKEND_CONFIG_FILE=\"$(PK_BACKEND_CONFIG_FILE)\" \
        -DPK_BACKEND_DEFAULT_PATH=\"$(PK_BACKEND_DEFAULT_PATH)\" \
        -DPK_BACKEND_DEFAULT_ROOT=\"$(PK_BACKEND_DEFAULT_ROOT)\" \
        -DPK_BACKEND_DEFAULT_DBPATH=\"$(PK_BACKEND_DEFAULT_DBPATH)\" \
+       -DPK_BACKEND_DEFAULT_GPGDIR=\"$(PK_BACKEND_DEFAULT_GPGDIR)\" \
        -DPK_BACKEND_DEFAULT_CACHEDIR=\"$(PK_BACKEND_DEFAULT_CACHEDIR)\" \
        -DPK_BACKEND_DEFAULT_LOGFILE=\"$(PK_BACKEND_DEFAULT_LOGFILE)\" \
        -DALPM_CACHE_PATH=\"$(ALPM_CACHE_PATH)\" \
diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index ba993f0..c3591b9 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -230,6 +230,7 @@ pk_backend_initialize_alpm (PkBackend *self, GError **error)
 	alpm_option_set_logcb (pk_backend_logcb);
 	alpm_option_set_root (PK_BACKEND_DEFAULT_ROOT);
 	alpm_option_set_dbpath (PK_BACKEND_DEFAULT_DBPATH);
+	alpm_option_set_signaturedir (PK_BACKEND_DEFAULT_GPGDIR);
 	alpm_option_set_logfile (PK_BACKEND_DEFAULT_LOGFILE);
 
 	return TRUE;
diff --git a/backends/alpm/pk-backend-config.c b/backends/alpm/pk-backend-config.c
index 21a4c54..a7d9efd 100644
--- a/backends/alpm/pk-backend-config.c
+++ b/backends/alpm/pk-backend-config.c
@@ -33,7 +33,7 @@
 typedef struct {
 	gboolean checkspace, ilovecandy, showsize, totaldl, usedelta, usesyslog;
 
-	gchar *arch, *cleanmethod, *dbpath, *logfile, *root, *xfercmd;
+	gchar *arch, *cleanmethod, *dbpath, *gpgdir, *logfile, *root, *xfercmd;
 
 	alpm_list_t *cachedirs, *holdpkgs, *ignoregrps, *ignorepkgs,
 		    *noextracts, *noupgrades, *syncfirsts;
@@ -76,6 +76,7 @@ pk_backend_config_free (PkBackendConfig *config)
 	g_free (config->arch);
 	g_free (config->cleanmethod);
 	g_free (config->dbpath);
+	g_free (config->gpgdir);
 	g_free (config->logfile);
 	g_free (config->root);
 	g_free (config->xfercmd);
@@ -234,6 +235,17 @@ pk_backend_config_set_dbpath (PkBackendConfig *config, const gchar *path)
 }
 
 static void
+pk_backend_config_set_gpgdir (PkBackendConfig *config, const gchar *path)
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (path != NULL);
+
+	g_free (config->gpgdir);
+	config->gpgdir = g_strdup (path);
+}
+
+
+static void
 pk_backend_config_set_logfile (PkBackendConfig *config, const gchar *filename)
 {
 	g_return_if_fail (config != NULL);
@@ -274,6 +286,7 @@ static const PkBackendConfigString pk_backend_config_string_options[] = {
 	{ "CacheDir", pk_backend_config_add_cachedir },
 	{ "CleanMethod", pk_backend_config_set_cleanmethod },
 	{ "DBPath", pk_backend_config_set_dbpath },
+	{ "GPGDir", pk_backend_config_set_gpgdir },
 	{ "LogFile", pk_backend_config_set_logfile },
 	{ "RootDir", pk_backend_config_set_root },
 	{ "XferCommand", pk_backend_config_set_xfercmd },
@@ -638,6 +651,18 @@ pk_backend_config_configure_paths (PkBackendConfig *config, GError **error)
 		return FALSE;
 	}
 
+	if (config->gpgdir == NULL) {
+		config->gpgdir = g_strconcat (alpm_option_get_root (),
+					      PK_BACKEND_DEFAULT_GPGDIR + 1,
+					      NULL);
+	}
+
+	if (alpm_option_set_signaturedir (config->gpgdir) < 0) {
+		g_set_error (error, ALPM_ERROR, pm_errno, "GPGDir: %s",
+			     alpm_strerrorlast ());
+		return FALSE;
+	}
+
 	if (config->logfile == NULL) {
 		config->logfile = g_strconcat (alpm_option_get_root (),
 					       PK_BACKEND_DEFAULT_LOGFILE + 1,
commit f2db7e1a74beb3738257ccac2f80b4a62f84fd4a
Author: Jonathan Conder <jonno.conder at gmail.com>
Date:   Wed Oct 26 19:47:32 2011 +1300

    alpm: add new error codes

diff --git a/backends/alpm/pk-backend-error.c b/backends/alpm/pk-backend-error.c
index 255f1fb..ac8fd17 100644
--- a/backends/alpm/pk-backend-error.c
+++ b/backends/alpm/pk-backend-error.c
@@ -33,140 +33,153 @@ pk_backend_error (PkBackend *self, GError *error)
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (error != NULL);
 
-	if (error->domain == ALPM_ERROR) {
-		switch (error->code) {
-			case PM_ERR_MEMORY:
-			case PM_ERR_SYSTEM:
-				code = PK_ERROR_ENUM_OOM;
-				break;
-
-			case PM_ERR_BADPERMS:
-				code = PK_ERROR_ENUM_NOT_AUTHORIZED;
-				break;
-
-			case PM_ERR_NOT_A_FILE:
-			case PM_ERR_NOT_A_DIR:
-				code = PK_ERROR_ENUM_FILE_NOT_FOUND;
-				break;
-
-			case PM_ERR_WRONG_ARGS:
-			case PM_ERR_HANDLE_NULL:
-			case PM_ERR_DB_NULL:
-			case PM_ERR_TRANS_NULL:
-			case PM_ERR_TRANS_NOT_INITIALIZED:
-			case PM_ERR_TRANS_NOT_PREPARED:
-			case PM_ERR_TRANS_NOT_LOCKED:
-			case PM_ERR_INVALID_REGEX:
-				code = PK_ERROR_ENUM_INTERNAL_ERROR;
-				break;
-
-			case PM_ERR_DISK_SPACE:
-				code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
-				break;
-
-			case PM_ERR_HANDLE_NOT_NULL:
-			case PM_ERR_DB_NOT_NULL:
-			case PM_ERR_TRANS_NOT_NULL:
-				code = PK_ERROR_ENUM_FAILED_INITIALIZATION;
-				break;
-
-			case PM_ERR_HANDLE_LOCK:
-				code = PK_ERROR_ENUM_CANNOT_GET_LOCK;
-				break;
-
-			case PM_ERR_DB_OPEN:
-			case PM_ERR_DB_NOT_FOUND:
-			case PM_ERR_PKG_REPO_NOT_FOUND:
-				code = PK_ERROR_ENUM_REPO_NOT_FOUND;
-				break;
-
-			case PM_ERR_DB_CREATE:
-				code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
-				break;
-
-			case PM_ERR_DB_VERSION:
-			case PM_ERR_DB_REMOVE:
-				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
-				break;
-
-			case PM_ERR_DB_WRITE:
-				code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
-				break;
-
-			case PM_ERR_SERVER_BAD_URL:
-				code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
-				break;
-
-			case PM_ERR_SERVER_NONE:
-				code = PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY;
-				break;
-
-			case PM_ERR_TRANS_DUP_TARGET:
-			case PM_ERR_TRANS_ABORT:
-				code = PK_ERROR_ENUM_TRANSACTION_ERROR;
-				break;
-
-			case PM_ERR_TRANS_TYPE:
-				code = PK_ERROR_ENUM_CANNOT_CANCEL;
-				break;
-
-			case PM_ERR_PKG_NOT_FOUND:
-				code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
-				break;
-
-			case PM_ERR_PKG_IGNORED:
-				code = PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED;
-				break;
-
-			case PM_ERR_PKG_INVALID:
-			case PM_ERR_PKG_OPEN:
-			case PM_ERR_PKG_INVALID_NAME:
-			case PM_ERR_DLT_INVALID:
-				code = PK_ERROR_ENUM_INVALID_PACKAGE_FILE;
-				break;
-
-			case PM_ERR_PKG_CANT_REMOVE:
-				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE;
-				break;
-
-			case PM_ERR_PKG_INVALID_ARCH:
-				code = PK_ERROR_ENUM_INCOMPATIBLE_ARCHITECTURE;
-				break;
-
-			case PM_ERR_DLT_PATCHFAILED:
-				code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_BUILD;
-				break;
-
-			case PM_ERR_UNSATISFIED_DEPS:
-				code = PK_ERROR_ENUM_DEP_RESOLUTION_FAILED;
-				break;
-
-			case PM_ERR_CONFLICTING_DEPS:
-				code = PK_ERROR_ENUM_PACKAGE_CONFLICTS;
-				break;
-
-			case PM_ERR_FILE_CONFLICTS:
-				code = PK_ERROR_ENUM_FILE_CONFLICTS;
-				break;
-
-			case PM_ERR_RETRIEVE:
-			case PM_ERR_LIBFETCH:
-			case PM_ERR_EXTERNAL_DOWNLOAD:
-				code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
-				break;
-
-			case PM_ERR_LIBARCHIVE:
-				code = PK_ERROR_ENUM_LOCAL_INSTALL_FAILED;
-				break;
-
-			case PM_ERR_CONFIG_INVALID:
-				code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
-				break;
-
-			case PM_ERR_PKG_HELD:
-				code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
-				break;
-		}
+	if (error->domain != ALPM_ERROR) {
+		pk_backend_error_code (self, code, "%s", error->message);
+		return;
+	}
+
+	switch (error->code) {
+		case PM_ERR_MEMORY:
+		case PM_ERR_SYSTEM:
+			code = PK_ERROR_ENUM_OOM;
+			break;
+
+		case PM_ERR_BADPERMS:
+			code = PK_ERROR_ENUM_NOT_AUTHORIZED;
+			break;
+
+		case PM_ERR_NOT_A_FILE:
+		case PM_ERR_NOT_A_DIR:
+			code = PK_ERROR_ENUM_FILE_NOT_FOUND;
+			break;
+
+		case PM_ERR_WRONG_ARGS:
+		case PM_ERR_HANDLE_NULL:
+		case PM_ERR_DB_NULL:
+		case PM_ERR_TRANS_NULL:
+		case PM_ERR_TRANS_NOT_INITIALIZED:
+		case PM_ERR_TRANS_NOT_PREPARED:
+		case PM_ERR_TRANS_NOT_LOCKED:
+		case PM_ERR_INVALID_REGEX:
+			code = PK_ERROR_ENUM_INTERNAL_ERROR;
+			break;
+
+		case PM_ERR_DISK_SPACE:
+			code = PK_ERROR_ENUM_NO_SPACE_ON_DEVICE;
+			break;
+
+		case PM_ERR_HANDLE_NOT_NULL:
+		case PM_ERR_DB_NOT_NULL:
+		case PM_ERR_TRANS_NOT_NULL:
+			code = PK_ERROR_ENUM_FAILED_INITIALIZATION;
+			break;
+
+		case PM_ERR_HANDLE_LOCK:
+			code = PK_ERROR_ENUM_CANNOT_GET_LOCK;
+			break;
+
+		case PM_ERR_DB_OPEN:
+		case PM_ERR_DB_NOT_FOUND:
+		case PM_ERR_PKG_REPO_NOT_FOUND:
+			code = PK_ERROR_ENUM_REPO_NOT_FOUND;
+			break;
+
+		case PM_ERR_DB_CREATE:
+			code = PK_ERROR_ENUM_CANNOT_WRITE_REPO_CONFIG;
+			break;
+
+		case PM_ERR_DB_VERSION:
+		case PM_ERR_DB_REMOVE:
+		case PM_ERR_SERVER_BAD_URL:
+		case PM_ERR_SIG_MISSINGDIR:
+			code = PK_ERROR_ENUM_REPO_CONFIGURATION_ERROR;
+			break;
+
+		case PM_ERR_DB_WRITE:
+			code = PK_ERROR_ENUM_REPO_NOT_AVAILABLE;
+			break;
+
+		case PM_ERR_SERVER_NONE:
+			code = PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY;
+			break;
+
+		case PM_ERR_TRANS_DUP_TARGET:
+		case PM_ERR_TRANS_ABORT:
+			code = PK_ERROR_ENUM_TRANSACTION_ERROR;
+			break;
+
+		case PM_ERR_TRANS_TYPE:
+			code = PK_ERROR_ENUM_CANNOT_CANCEL;
+			break;
+
+		case PM_ERR_PKG_NOT_FOUND:
+			code = PK_ERROR_ENUM_PACKAGE_NOT_FOUND;
+			break;
+
+		case PM_ERR_PKG_IGNORED:
+			code = PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED;
+			break;
+
+		case PM_ERR_PKG_INVALID:
+		case PM_ERR_PKG_OPEN:
+		case PM_ERR_PKG_INVALID_NAME:
+		case PM_ERR_DLT_INVALID:
+			code = PK_ERROR_ENUM_INVALID_PACKAGE_FILE;
+			break;
+
+		case PM_ERR_PKG_CANT_REMOVE:
+			code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE;
+			break;
+
+		case PM_ERR_PKG_INVALID_ARCH:
+			code = PK_ERROR_ENUM_INCOMPATIBLE_ARCHITECTURE;
+			break;
+
+		case PM_ERR_SIG_INVALID:
+			code = PK_ERROR_ENUM_BAD_GPG_SIGNATURE;
+			break;
+
+		case PM_ERR_SIG_UNKNOWN:
+			code = PK_ERROR_ENUM_MISSING_GPG_SIGNATURE;
+			break;
+
+		case PM_ERR_DLT_PATCHFAILED:
+			code = PK_ERROR_ENUM_PACKAGE_FAILED_TO_BUILD;
+			break;
+
+		case PM_ERR_UNSATISFIED_DEPS:
+			code = PK_ERROR_ENUM_DEP_RESOLUTION_FAILED;
+			break;
+
+		case PM_ERR_CONFLICTING_DEPS:
+			code = PK_ERROR_ENUM_PACKAGE_CONFLICTS;
+			break;
+
+		case PM_ERR_FILE_CONFLICTS:
+			code = PK_ERROR_ENUM_FILE_CONFLICTS;
+			break;
+
+		case PM_ERR_RETRIEVE:
+		case PM_ERR_LIBCURL:
+		case PM_ERR_EXTERNAL_DOWNLOAD:
+			code = PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED;
+			break;
+
+		case PM_ERR_LIBARCHIVE:
+			code = PK_ERROR_ENUM_LOCAL_INSTALL_FAILED;
+			break;
+
+		case PM_ERR_GPGME:
+			code = PK_ERROR_ENUM_GPG_FAILURE;
+			break;
+
+		case PM_ERR_CONFIG_INVALID:
+			code = PK_ERROR_ENUM_FAILED_CONFIG_PARSING;
+			break;
+
+		case PM_ERR_PKG_HELD:
+			code = PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE;
+			break;
 	}
 
 	pk_backend_error_code (self, code, "%s", error->message);
commit 7dbee21a7adbc25856b53532d0fe55f272f580bb
Author: Nils Philippsen <nils at redhat.com>
Date:   Mon Jan 9 15:51:17 2012 +0100

    yum: don't request authorization for trusted packages (#771746)
    
    Misunderstood PackageKitYumBackend._is_package_repo_signed() semantics,
    revert to the implementation from before I fixed it till it broke.
    (cherry picked from commit d99c430775a6de3e7e98819f5b5c0c6017d6edde)

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index fd73f87..beb027e 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -1706,12 +1706,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         signed = False
         try:
             repo = self.yumbase.repos.getRepo(pkg.repoid)
-            if hasattr(repo, "_override_sigchecks"):
-                # yum >= 3.2.29
-                signed = not repo._override_sigchecks
-            else:
-                # yum < 3.2.29
-                signed = repo.gpgcheck
+            signed = repo.gpgcheck
         except yum.Errors.RepoError, e:
             raise PkError(ERROR_REPO_NOT_AVAILABLE, _to_unicode(e))
         except exceptions.IOError, e:
commit 65baf370dab99f7f13efbc4fee51e88b53084cdc
Author: Matthias Klumpp <matthias at tenstral.net>
Date:   Fri Nov 18 14:23:14 2011 +0100

    browser-plugin: Make it compile with newest xulrunner
    
    Attention! This will make builds with older xulrunner
    versions impossible. I will implement a workaround for
    this later, if it is less invasive or if someone needs it.
    But all distributions shipping PK 0.7.x should also ship
    a new Firefox/Xulrunner version, as the old ones are unsupported.
    
    Conflicts:
    
    	configure.ac
    	contrib/browser-plugin/pk-main.c

diff --git a/configure.ac b/configure.ac
index eadd86a..73e5154 100644
--- a/configure.ac
+++ b/configure.ac
@@ -355,9 +355,9 @@ AC_ARG_ENABLE(browser_plugin, AS_HELP_STRING([--enable-browser-plugin],[Build br
 	      enable_browser_plugin=$enableval,enable_browser_plugin=yes)
 if test x$enable_browser_plugin = xyes; then
 	PKG_CHECK_MODULES(PK_BROWSER_PLUGIN,	\
-			  mozilla-plugin	\
+			  mozilla-plugin >= 8.0	\
 			  gio-unix-2.0		\
-			  nspr \
+			  nspr >= 4.8		\
 			  cairo			\
 			  pango			\
 			  gtk+-2.0 >= 2.14.0	\
@@ -661,7 +661,7 @@ if test x$enable_apt = xyes; then
 	PY_CHECK_MOD([apt_pkg],,,AC_MSG_ERROR([Apt backend needs python-apt]))
 	PY_CHECK_MOD([UpdateManager.Core.MetaRelease],,
 		     AC_DEFINE(HAVE_PYTHON_META_RELEASE, 1,
-			       "Meta release is available"), 
+			       "Meta release is available"),
 		     AC_MSG_WARN([Distro upgrade notification not supported]))
 	PY_CHECK_MOD([softwareproperties.SoftwareProperties],,
 		     AC_DEFINE(HAVE_PYTHON_SOFTWARE_PROPERTIES, 1,
@@ -697,7 +697,7 @@ if test x$enable_aptcc = xyes; then
 			  AC_MSG_RESULT([yes]),
 			  AC_MSG_FAILURE([need libapt-pkg 0.7 or later]))
 
-	AC_MSG_CHECKING([whether apt supports ddtp]) 
+	AC_MSG_CHECKING([whether apt supports ddtp])
 
 	AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[#include <apt-pkg/pkgcache.h>]],
 					  [[pkgCache::DescIterator d;]]),
diff --git a/contrib/browser-plugin/pk-main.c b/contrib/browser-plugin/pk-main.c
index 7d35f51..0cf7891 100644
--- a/contrib/browser-plugin/pk-main.c
+++ b/contrib/browser-plugin/pk-main.c
@@ -546,9 +546,8 @@ NP_Shutdown ()
 const char *
 NP_GetMIMEDescription (void)
 {
-	pk_debug ("NP_GetMIMEDescription");
-
-	return (gchar*) "application/x-packagekit-plugin:bsc:PackageKit Plugin";
+	g_debug ("NP_GetMIMEDescription");
+	return (const gchar*) "application/x-packagekit-plugin:bsc:PackageKit Plugin";
 }
 
 /**
commit 091bcaa525dc20a5e0545037a859f28e28354d60
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Dec 5 10:53:36 2011 +0000

    trivial: post release version bump

diff --git a/RELEASE b/RELEASE
index 0bd29b1..06e7dfe 100644
--- a/RELEASE
+++ b/RELEASE
@@ -2,10 +2,10 @@ PackageKit Release Notes
 
 1. Write NEWS entries for PackageKit in the same format as usual.
 
-git shortlog PACKAGEKIT_0_6_20.. | grep -i -v trivial | grep -v Merge > NEWS.new
+git shortlog PACKAGEKIT_0_6_21.. | grep -i -v trivial | grep -v Merge > NEWS.new
 
 --------------------------------------------------------------------------------
-Version 0.6.21
+Version 0.6.22
 ~~~~~~~~~~~~~~
 Released: 2011-xx-xx
 
@@ -26,8 +26,8 @@ Bugfixes:
 
 4. Commit changes in PackageKit git:
 
-git commit -a -m "Release version 0.6.20"
-git tag -s -f -m "Release 0.6.20" PACKAGEKIT_0_6_20
+git commit -a -m "Release version 0.6.22"
+git tag -s -f -m "Release 0.6.22" PACKAGEKIT_0_6_22
 <gpg password>
 git push --tags
 git push
@@ -52,7 +52,7 @@ git push
 10. Send an email to packagekit at lists.freedesktop.org
 
 =================================================
-PackageKit 0.6.21 released!
+PackageKit 0.6.22 released!
 
 Tarballs available here: http://www.packagekit.org/releases/
 
diff --git a/configure.ac b/configure.ac
index 6eb4bdd..eadd86a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.63)
 
 m4_define([pk_major_version], [0])
 m4_define([pk_minor_version], [6])
-m4_define([pk_micro_version], [21])
+m4_define([pk_micro_version], [22])
 m4_define([pk_version],
           [pk_major_version.pk_minor_version.pk_micro_version])
 


More information about the PackageKit-commit mailing list