[PackageKit-commit] packagekit: Branch 'master' - 11 commits

Richard Hughes hughsient at kemper.freedesktop.org
Thu Jun 5 01:12:44 PDT 2008


 .gitignore                          |    3 
 backends/opkg/pk-backend-opkg.c     |   12 
 backends/poldek/pk-backend-poldek.c |   33 +-
 docs/html/pk-faq.html               |  523 ----------------------------------
 docs/html/pk-matrix.html            |  548 ++++++++++++++++++++++++++++++++++++
 libpackagekit/pk-client.c           |   26 +
 libpackagekit/pk-control.c          |    1 
 libpackagekit/pk-package-list.c     |   23 +
 libselftest/libselftest.c           |   27 +
 libselftest/libselftest.h           |   27 -
 src/.gitignore                      |    1 
 src/pk-spawn.c                      |   37 --
 tools/.gitignore                    |    1 
 13 files changed, 685 insertions(+), 577 deletions(-)

New commits:
commit 17d445b84a6c699ea869c3ba6500c0e3f27a292a
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jun 5 08:40:37 2008 +0100

    trivial: add another unit test for sorting twice the same list

diff --git a/libpackagekit/pk-package-list.c b/libpackagekit/pk-package-list.c
index 3727635..33d7d07 100644
--- a/libpackagekit/pk-package-list.c
+++ b/libpackagekit/pk-package-list.c
@@ -538,6 +538,29 @@ libst_package_list (LibSelfTest *test)
 
 	g_object_unref (plist);
 
+	plist = pk_package_list_new ();
+	pk_package_list_add (plist, PK_INFO_ENUM_SECURITY, "def;1.23;i386;data", "zed");
+	pk_package_list_add (plist, PK_INFO_ENUM_SECURITY, "abc;1.23;i386;data", "fed");
+	pk_package_list_add (plist, PK_INFO_ENUM_BUGFIX, "ghi;1.23;i386;data", "aed");
+	pk_package_list_add (plist, PK_INFO_ENUM_BUGFIX, "jkl;1.23;i386;data", "med");
+
+	/************************************************************/
+	libst_title (test, "sort by package_id then priority (should not mess up previous sort)");
+	pk_package_list_sort (plist);
+	pk_package_list_sort_info (plist);
+	r0 = pk_package_list_get_item (plist, 0);
+	r1 = pk_package_list_get_item (plist, 1);
+	r2 = pk_package_list_get_item (plist, 2);
+	if (pk_strequal (r0->package_id, "abc;1.23;i386;data") &&
+	    pk_strequal (r1->package_id, "def;1.23;i386;data") &&
+	    pk_strequal (r2->package_id, "ghi;1.23;i386;data")) {
+		libst_success (test, NULL);
+	} else {
+		libst_failed (test, "could not sort: %s,%s,%s", r0->package_id, r1->package_id, r2->package_id);
+	}
+
+	g_object_unref (plist);
+
 	libst_end (test);
 }
 #endif
commit f82572da2beb8d24c3ddb937ca8e071a12a53739
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jun 5 08:18:11 2008 +0100

    trivial: move the feature matrix into it's own file, there are too many FAQ entries now

diff --git a/docs/html/pk-faq.html b/docs/html/pk-faq.html
index 3e37cc1..1fb8563 100644
--- a/docs/html/pk-faq.html
+++ b/docs/html/pk-faq.html
@@ -48,523 +48,12 @@
 
 <hr>
 <h3><a name="how-complete">How complete are the backends?</a></h3>
-<h4>Methods</h4>
-<table>
-<tr>
-<td width="150px">&nbsp;</td>
-<td><center>apt</center></td>
-<td><center>alpm</center></td>
-<td><center>box</center></td>
-<td><center>conary</center></td>
-<td><center>opkg</center></td>
-<td><center>pisi</center></td>
-<td><center>poldek</center></td>
-<td><center>smart</center></td>
-<td><center>urpmi</center></td>
-<td><center>yum</center></td>
-<td><center>yum2</center></td>
-<td><center>zypp</center></td>
-</tr>
-<tr>
-<td><b>Resolve</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>RefreshCache</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetUpdates</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>UpdateSystem</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>SearchName</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>SearchDetails</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>SearchFile</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>SearchGroup</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>InstallPackages</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>InstallFiles</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>RemovePackages</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>UpdatePackage</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetDepends</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetRequires</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetDetails</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetFiles</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetUpdateDetail</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetRepoList</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>RepoEnable</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>RepoSetData</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Cancel</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>ServicePack</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>WhatProvides</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GetPackages</b></td>
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[good]"/></td><!-- zypp -->
-</tr>
-</table>
-
-<h4>Filters</h4>
-<table>
-<tr>
-<td width="150px">&nbsp;</td>
-<td><center>apt</center></td>
-<td><center>alpm</center></td>
-<td><center>box</center></td>
-<td><center>conary</center></td>
-<td><center>opkg</center></td>
-<td><center>pisi</center></td>
-<td><center>poldek</center></td>
-<td><center>smart</center></td>
-<td><center>urpmi</center></td>
-<td><center>yum</center></td>
-<td><center>yum2</center></td>
-<td><center>zypp</center></td>
-</tr>
-<tr>
-<td><b>Installed</b></td>
-<td><img src="img/status-good.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-good.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Development</b></td>
-<td><img src="img/status-good.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>GUI</b></td>
-<td><img src="img/status-good.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Free</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Visible</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Supported</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Newest</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
-</tr>
-<tr>
-<td><b>Arch</b></td>
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
-<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
-<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
-</tr>
-</table>
+<p>
+Backends do not have to be complete when they are added to PackageKit.
+If a feature is not present then it is hidden in the UI, which will explain why on some
+distributions the client tools look a little different to other distributions.
+You can see the latest feature matrix <a href="pk-matrix.html">here</a>.
+</p>
 
 <hr>
 <h3><a name="1-click-install">Does PackageKit support 1-Click Install?</a></h3>
diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
new file mode 100644
index 0000000..3b0fc37
--- /dev/null
+++ b/docs/html/pk-matrix.html
@@ -0,0 +1,548 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>PackageKit - Feature Matrix</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
+</head>
+<body>
+
+<table align="center" class="title">
+<tr>
+ <td><center><img src="img/packagekit.png" alt=""/></center></td>
+ <td width="95%" valign="middle"><p class="title">Feature Matrix</p></td>
+ <td><center><img src="img/packagekit.png" alt=""/></center></td>
+</tr>
+</table>
+
+<p>Back to the <a href="index.html">main page</a></p>
+
+<h1>Feature Matrix</h1>
+<table>
+<tr>
+<td width="150px">&nbsp;</td>
+<td><center>apt</center></td>
+<td><center>alpm</center></td>
+<td><center>box</center></td>
+<td><center>conary</center></td>
+<td><center>opkg</center></td>
+<td><center>pisi</center></td>
+<td><center>poldek</center></td>
+<td><center>smart</center></td>
+<td><center>urpmi</center></td>
+<td><center>yum</center></td>
+<td><center>yum2</center></td>
+<td><center>zypp</center></td>
+</tr>
+<tr>
+<td><b>Resolve</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>RefreshCache</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetUpdates</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>UpdateSystem</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>SearchName</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>SearchDetails</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>SearchFile</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>SearchGroup</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>InstallPackages</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>InstallFiles</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>RemovePackages</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>UpdatePackage</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetDepends</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetRequires</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetDetails</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetFiles</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetUpdateDetail</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetRepoList</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>RepoEnable</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>RepoSetData</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Cancel</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>ServicePack</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>WhatProvides</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GetPackages</b></td>
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[good]"/></td><!-- zypp -->
+</tr>
+</table>
+
+<h4>Filters</h4>
+<table>
+<tr>
+<td width="150px">&nbsp;</td>
+<td><center>apt</center></td>
+<td><center>alpm</center></td>
+<td><center>box</center></td>
+<td><center>conary</center></td>
+<td><center>opkg</center></td>
+<td><center>pisi</center></td>
+<td><center>poldek</center></td>
+<td><center>smart</center></td>
+<td><center>urpmi</center></td>
+<td><center>yum</center></td>
+<td><center>yum2</center></td>
+<td><center>zypp</center></td>
+</tr>
+<tr>
+<td><b>Installed</b></td>
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Development</b></td>
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>GUI</b></td>
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Free</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Visible</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Supported</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Newest</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- zypp -->
+</tr>
+<tr>
+<td><b>Arch</b></td>
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- apt -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- alpm -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- box -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- conary -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum2 -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- zypp -->
+</tr>
+</table>
+
+<p>Back to the <a href="index.html">main page</a></p>
+
+<p class="footer">
+ Copyright <a href="mailto:richard at hughsie.com">Richard Hughes 2007-2008</a><br/>
+ <a href="http://validator.w3.org/check/referer">Optimized</a>
+ for <a href="http://www.w3.org/">standards</a>.
+</p>
+
+</body>
+</html>
+
commit 18235470b5fb60409d4e7dbf77af5295b7346083
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 4 17:35:16 2008 +0100

    trivial: move libst_get_data_file() into libselftest so we can use it in other modules

diff --git a/libselftest/libselftest.c b/libselftest/libselftest.c
index ab3acd2..6336430 100644
--- a/libselftest/libselftest.c
+++ b/libselftest/libselftest.c
@@ -221,3 +221,30 @@ failed:
 	exit (1);
 }
 
+/**
+ * libst_get_data_file:
+ **/
+gchar *
+libst_get_data_file (const gchar *filename)
+{
+	gboolean ret;
+	gchar *full;
+
+	/* check to see if we are being run in the build root */
+	full = g_build_filename ("..", "data", "tests", filename, NULL);
+	ret = g_file_test (full, G_FILE_TEST_EXISTS);
+	if (ret) {
+		return full;
+	}
+	g_free (full);
+
+	/* check to see if we are being run in make check */
+	full = g_build_filename ("..", "..", "data", "tests", filename, NULL);
+	ret = g_file_test (full, G_FILE_TEST_EXISTS);
+	if (ret) {
+		return full;
+	}
+	g_free (full);
+	return NULL;
+}
+
diff --git a/libselftest/libselftest.h b/libselftest/libselftest.h
index 657f773..e249765 100644
--- a/libselftest/libselftest.h
+++ b/libselftest/libselftest.h
@@ -55,19 +55,20 @@ typedef struct
 	gpointer	 user_data;
 } LibSelfTest;
 
-gboolean	libst_start		(LibSelfTest *test, const gchar *name, LibSelfTestClass class);
-void		libst_end		(LibSelfTest *test);
-void		libst_title		(LibSelfTest *test, const gchar *format, ...);
-void		libst_success		(LibSelfTest *test, const gchar *format, ...);
-void		libst_failed		(LibSelfTest *test, const gchar *format, ...);
-void		libst_init		(LibSelfTest *test);
-gint		libst_finish		(LibSelfTest *test);
-guint		libst_elapsed		(LibSelfTest *test);
-void		libst_loopquit		(LibSelfTest *test);
-void		libst_loopwait		(LibSelfTest *test, guint timeout);
-void		libst_loopcheck		(LibSelfTest *test);
-void		libst_set_user_data	(LibSelfTest *test, gpointer user_data);
-gpointer	libst_get_user_data	(LibSelfTest *test);
+gboolean	 libst_start		(LibSelfTest *test, const gchar *name, LibSelfTestClass class);
+void		 libst_end		(LibSelfTest *test);
+void		 libst_title		(LibSelfTest *test, const gchar *format, ...);
+void		 libst_success		(LibSelfTest *test, const gchar *format, ...);
+void		 libst_failed		(LibSelfTest *test, const gchar *format, ...);
+void		 libst_init		(LibSelfTest *test);
+gint		 libst_finish		(LibSelfTest *test);
+guint		 libst_elapsed		(LibSelfTest *test);
+void		 libst_loopquit		(LibSelfTest *test);
+void		 libst_loopwait		(LibSelfTest *test, guint timeout);
+void		 libst_loopcheck	(LibSelfTest *test);
+void		 libst_set_user_data	(LibSelfTest *test, gpointer user_data);
+gpointer	 libst_get_user_data	(LibSelfTest *test);
+gchar		*libst_get_data_file	(const gchar *filename);
 
 #endif	/* __LIBSELFTEST_H */
 
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index c4622f9..dc08e4c 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -408,33 +408,6 @@ guint stdout_count = 0;
 guint finished_count = 0;
 
 /**
- * pk_test_get_data:
- **/
-static gchar *
-pk_test_get_data (const gchar *filename)
-{
-	gboolean ret;
-	gchar *full;
-
-	/* check to see if we are being run in the build root */
-	full = g_build_filename ("..", "data", "tests", filename, NULL);
-	ret = g_file_test (full, G_FILE_TEST_EXISTS);
-	if (ret) {
-		return full;
-	}
-	g_free (full);
-
-	/* check to see if we are being run in make check */
-	full = g_build_filename ("..", "..", "data", "tests", filename, NULL);
-	ret = g_file_test (full, G_FILE_TEST_EXISTS);
-	if (ret) {
-		return full;
-	}
-	g_free (full);
-	return NULL;
-}
-
-/**
  * pk_test_finished_cb:
  **/
 static void
@@ -516,7 +489,7 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure run correct helper");
 	mexit = -1;
-	path = pk_test_get_data ("pk-spawn-test.sh");
+	path = libst_get_data_file ("pk-spawn-test.sh");
 	argv = g_strsplit (path, " ", 0);
 	ret = pk_spawn_argv (spawn, argv, NULL);
 	g_free (path);
@@ -561,7 +534,7 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure we set the proxy");
 	mexit = -1;
-	path = pk_test_get_data ("pk-spawn-proxy.sh");
+	path = libst_get_data_file ("pk-spawn-proxy.sh");
 	argv = g_strsplit (path, " ", 0);
 	envp = g_strsplit ("http_proxy=username:password at server:port "
 			   "ftp_proxy=username:password at server:port", " ", 0);
@@ -584,7 +557,7 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure run correct helper, and kill it");
 	mexit = BAD_EXIT;
-	path = pk_test_get_data ("pk-spawn-test.sh");
+	path = libst_get_data_file ("pk-spawn-test.sh");
 	argv = g_strsplit (path, " ", 0);
 	ret = pk_spawn_argv (spawn, argv, NULL);
 	g_free (path);
@@ -614,7 +587,7 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure run correct helper, and quit it");
 	mexit = BAD_EXIT;
-	path = pk_test_get_data ("pk-spawn-test-sigquit.sh");
+	path = libst_get_data_file ("pk-spawn-test-sigquit.sh");
 	argv = g_strsplit (path, " ", 0);
 	ret = pk_spawn_argv (spawn, argv, NULL);
 	g_free (path);
@@ -640,7 +613,7 @@ libst_spawn (LibSelfTest *test)
 
 	/************************************************************/
 	libst_title (test, "run lots of data for profiling");
-	path = pk_test_get_data ("pk-spawn-test-profiling.sh");
+	path = libst_get_data_file ("pk-spawn-test-profiling.sh");
 	argv = g_strsplit (path, " ", 0);
 	ret = pk_spawn_argv (spawn, argv, NULL);
 	g_free (path);
commit 0567928be4cb41a6318fc26f4a6f4ed8f7a078cd
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 4 17:10:25 2008 +0100

    trivial: update some .gitignore files

diff --git a/.gitignore b/.gitignore
index 53dd81f..c9d97e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,4 +58,7 @@ _build_
 waf-lightc
 wafadmin
 packagekit.types
+.anjuta
+*.cache
+*.anjuta
 
diff --git a/src/.gitignore b/src/.gitignore
index f3ad734..a6fc053 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -12,4 +12,5 @@ debug.log
 *.gcno
 *.txt
 *.out
+*.db
 
diff --git a/tools/.gitignore b/tools/.gitignore
index d6ec1da..b68d728 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -1,2 +1,3 @@
 allApplications
+rpmbuild.sh
 
commit b9d8659c7c77aef02713bfab33d16f80ef7b435b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 4 12:55:38 2008 +0100

    bugfix: in PkClient don't do a NULL dereference when we try to set an error when not reset, and we are ignoring the error description

diff --git a/libpackagekit/pk-client.c b/libpackagekit/pk-client.c
index 3cb4343..7df7f1d 100644
--- a/libpackagekit/pk-client.c
+++ b/libpackagekit/pk-client.c
@@ -944,19 +944,24 @@ pk_client_allocate_transaction_id (PkClient *client, GError **error)
 {
 	gboolean ret;
 	gchar *tid;
+	GError *error_local = NULL;
 
 	g_return_val_if_fail (PK_IS_CLIENT (client), FALSE);
 
-	/* get and set a new ID */
-	ret = pk_control_allocate_transaction_id (client->priv->control, &tid, error);
+	/* get a new ID */
+	ret = pk_control_allocate_transaction_id (client->priv->control, &tid, &error_local);
 	if (!ret) {
-		pk_warning ("failed to get a TID: %s", (*error)->message);
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "failed to get a TID: %s", error_local->message);
+		g_error_free (error_local);
 		return FALSE;
 	}
-	ret = pk_client_set_tid (client, tid, error);
+
+	/* set that new ID to this GObject */
+	ret = pk_client_set_tid (client, tid, &error_local);
 	g_free (tid);
 	if (!ret) {
-		pk_warning ("failed to set TID: %s", (*error)->message);
+		pk_client_error_set (error, PK_CLIENT_ERROR_FAILED, "failed to set TID: %s", error_local->message);
+		g_error_free (error_local);
 		return FALSE;
 	}
 	return TRUE;
@@ -3872,12 +3877,21 @@ libst_client (LibSelfTest *test)
 	libst_title (test, "get updates");
 	ret = pk_client_get_updates (client, PK_FILTER_ENUM_NONE, &error);
 	if (!ret) {
-		libst_failed (test, "failed to reset: %s", error->message);
+		libst_failed (test, "failed to get updates: %s", error->message);
 		g_error_free (error);
 	}
 	libst_success (test, NULL);
 
 	/************************************************************/
+	libst_title (test, "get updates (without reset) with null error");
+	ret = pk_client_get_updates (client, PK_FILTER_ENUM_NONE, NULL);
+	if (!ret) {
+		libst_success (test, NULL);
+	} else {
+		libst_failed (test, "got updates with no reset (no description possible)");
+	}
+
+	/************************************************************/
 	libst_title (test, "reset client #2");
 	ret = pk_client_reset (client, &error);
 	if (!ret) {
commit f695ed3dc95a215c328615aee75d70e9fe8a6410
Author: Marcin Banasiak <megabajt at pld-linux.org>
Date:   Wed Jun 4 13:33:44 2008 +0200

    poldek: fix RemovePackages to remove more than one package

diff --git a/backends/poldek/pk-backend-poldek.c b/backends/poldek/pk-backend-poldek.c
index 2a2651f..a021fba 100644
--- a/backends/poldek/pk-backend-poldek.c
+++ b/backends/poldek/pk-backend-poldek.c
@@ -2164,8 +2164,10 @@ backend_remove_packages_thread (PkBackend *backend)
 {
 	struct poclidek_rcmd	*rcmd;
 	struct poldek_ts	*ts;
-	gchar			*nvra, *command;
+	GString *cmd;
+	gchar *command;
 	gchar **package_ids;
+	gint i;
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	pb_load_packages (backend);
@@ -2176,8 +2178,18 @@ backend_remove_packages_thread (PkBackend *backend)
 	ts = poldek_ts_new (ctx, 0);
 	rcmd = poclidek_rcmd_new (cctx, ts);
 
-	nvra = poldek_get_nvra_from_package_id (package_ids[0]);
-	command = g_strdup_printf ("uninstall %s", nvra);
+	cmd = g_string_new ("uninstall ");
+
+	/* prepare command */
+	for (i = 0; i < g_strv_length (package_ids); i++) {
+		gchar	*nvra = poldek_get_nvra_from_package_id (package_ids[i]);
+
+		g_string_append_printf (cmd, "%s ", nvra);
+
+		g_free (nvra);
+	}
+
+	command = g_string_free (cmd, FALSE);
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_DEP_RESOLVE);
 
@@ -2186,7 +2198,6 @@ backend_remove_packages_thread (PkBackend *backend)
 		pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE, pberror->tslog->str);
 	}
 
-	g_free (nvra);
 	g_free (command);
 
 	poldek_ts_free (ts);
commit 0e7a6cd7b4491eb7d94bd91a8f8a0d96ff83b559
Author: Marcin Banasiak <megabajt at pld-linux.org>
Date:   Wed Jun 4 13:31:52 2008 +0200

    poldek: fix crash in Resolve method

diff --git a/backends/poldek/pk-backend-poldek.c b/backends/poldek/pk-backend-poldek.c
index c205503..2a2651f 100644
--- a/backends/poldek/pk-backend-poldek.c
+++ b/backends/poldek/pk-backend-poldek.c
@@ -54,7 +54,8 @@ enum {
 	SEARCH_ENUM_GROUP,
 	SEARCH_ENUM_DETAILS,
 	SEARCH_ENUM_FILE,
-	SEARCH_ENUM_PROVIDES
+	SEARCH_ENUM_PROVIDES,
+	SEARCH_ENUM_RESOLVE
 };
 
 typedef struct {
@@ -1161,7 +1162,7 @@ search_package_thread (PkBackend *backend)
 	search = pk_backend_get_string (backend, "search");
 	filters = pk_backend_get_uint (backend, "filters");
 
-	/* GetPackages*/
+	/* GetPackages */
 	if (mode == SEARCH_ENUM_NONE) {
 		search_cmd = g_strdup ("ls -q");
 	/* SearchName */
@@ -1193,6 +1194,10 @@ search_package_thread (PkBackend *backend)
 		} else if (provides == PK_PROVIDES_ENUM_MIMETYPE) {
 			search_cmd = g_strdup_printf ("search -qp mimetype(%s)", search);
 		}
+	} else if (mode == SEARCH_ENUM_RESOLVE) {
+		search = pk_backend_get_string (backend, "package_id");
+
+		search_cmd = g_strdup_printf ("ls -q %s", search);
 	}
 
 	if (cmd != NULL && search_cmd)
@@ -1317,6 +1322,7 @@ search_package_thread (PkBackend *backend)
 			case SEARCH_ENUM_GROUP:
 			case SEARCH_ENUM_DETAILS:
 			case SEARCH_ENUM_FILE:
+			case SEARCH_ENUM_RESOLVE:
 				pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_CANCELLED, "Search cancelled.");
 				break;
 			default:
@@ -2202,11 +2208,11 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
  * backend_resolve:
  */
 static void
-backend_resolve (PkBackend *backend, PkFilterEnum filters, const gchar *package)
+backend_resolve (PkBackend *backend, PkFilterEnum filters, const gchar *package_id)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	poldek_backend_set_allow_cancel (backend, TRUE, TRUE);
-	pk_backend_set_uint (backend, "mode", SEARCH_ENUM_NAME);
+	pk_backend_set_uint (backend, "mode", SEARCH_ENUM_RESOLVE);
 	pk_backend_thread_create (backend, search_package_thread);
 }
 
commit c8c624b96c8e1c30cd80d48e7594fed7cff3486c
Merge: 63672e1... 07fd340...
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 4 11:02:16 2008 +0100

    Merge branch 'master' of git+ssh://hughsie@git.packagekit.org/srv/git/PackageKit

commit 63672e153637061f00d5fd50f2ff78ea1294d400
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jun 4 10:58:26 2008 +0100

    trivial: fix a small memory leak on client program exit

diff --git a/libpackagekit/pk-control.c b/libpackagekit/pk-control.c
index 5a54ccc..7e151ec 100644
--- a/libpackagekit/pk-control.c
+++ b/libpackagekit/pk-control.c
@@ -839,6 +839,7 @@ pk_control_finalize (GObject *object)
 
 	/* free the proxy */
 	g_object_unref (G_OBJECT (control->priv->proxy));
+	g_strfreev (control->priv->array);
 
 	G_OBJECT_CLASS (pk_control_parent_class)->finalize (object);
 }
commit 07fd3404a62e40597f865dafd94cf7e921375e37
Merge: c6f7ccd... b3888f1...
Author: I-Fan, Chen <tick at openmoko.com>
Date:   Wed Jun 4 17:20:10 2008 +0800

    Merge branch 'tick'

commit b3888f17d25479cea527124005f12887e9fddf16
Author: I-Fan, Chen <tick at openmoko.com>
Date:   Wed Jun 4 17:13:00 2008 +0800

    Opkg: Adding group message to get-details

diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c
index 2d70108..02966c9 100644
--- a/backends/opkg/pk-backend-opkg.c
+++ b/backends/opkg/pk-backend-opkg.c
@@ -656,6 +656,8 @@ backend_get_details_thread (PkBackend *backend)
 {
 	PkPackageId *pi;
 	const gchar *package_id;
+	int group_index;
+	PkGroupEnum group = 0;
 	opkg_package_t *pkg;
 	gchar *newid;
 
@@ -681,8 +683,16 @@ backend_get_details_thread (PkBackend *backend)
 
 	newid = g_strdup_printf ("%s;%s;%s;%s", pkg->name, pkg->version, pkg->architecture, pkg->repository);
 
-	pk_backend_details (backend, newid, NULL, 0, pkg->description, pkg->url, pkg->size);
+	if (pkg->tags) {
+		for (group_index = 0; group < PK_GROUP_ENUM_UNKNOWN; group_index++) {
+			group = 1 << group_index;
+			if (!(group & backend_get_groups(backend))) continue;
+			if (opkg_check_tag(pkg, (gchar *)pk_group_enum_to_text(group))) 
+				break;
+		}
+	}
 
+	pk_backend_details (backend, newid, NULL, group, pkg->description, pkg->url, pkg->size);
 	g_free (newid);
 	pk_backend_finished (backend);
 	return TRUE;


More information about the PackageKit-commit mailing list