<!-- Generator: GNU source-highlight 2.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>#
#
# add_file "packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch"
#  content [3f6aeebb5d160701e6668a69f935978eca1ce3e5]

# patch "conf/distro/include/sane-srcrevs.inc"
#  from [31946f0f79f0bc829893d6218a66ceb88a01c3b2]
#    to [12ee6fdf6e7ea39bbac6764c1464c053eae524eb]

# patch "packages/packagekit/packagekit_git.bb"
#  from [d1b9bdd3d88e67835cab9f7b7bb6155fc89f2362]
#    to [87d921eb998dab5f586a8f64d30c9921be03d5eb]
#
============================================================
<font color="#FF6600">--- packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch        3f6aeebb5d160701e6668a69f935978eca1ce3e5</font>
<font color="#009900">+++ packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch        3f6aeebb5d160701e6668a69f935978eca1ce3e5</font>
<font color="#0000FF">@@ -0,0 +1,2938 @@</font>
<font color="#009900">+diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c</font>
<font color="#009900">+index 3270e42..45e7a44 100644</font>
<font color="#009900">+--- a/backends/alpm/pk-backend-alpm.c</font>
<font color="#009900">++++ b/backends/alpm/pk-backend-alpm.c</font>
<font color="#009900">+@@ -895,7 +895,7 @@ backend_get_repo_list (PkBackend *backend, PkFilterEnum filters)</font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+ backend_install_files_thread (PkBackend *backend)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         gchar **full_paths = pk_backend_get_strv (backend, "full_paths");</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -1050,7 +1050,7 @@ backend_install_packages (PkBackend *backend, gchar **package_ids)</font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+ backend_refresh_cache_thread (PkBackend *backend)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NOSCRIPTLET, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {</font>
<font color="#009900">+                 pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerror (pm_errno));</font>
<font color="#009900">+diff --git a/backends/apt/pk-apt-build-db.cpp b/backends/apt/pk-apt-build-db.cpp</font>
<font color="#009900">+index d47c348..885275d 100644</font>
<font color="#009900">+--- a/backends/apt/pk-apt-build-db.cpp</font>
<font color="#009900">++++ b/backends/apt/pk-apt-build-db.cpp</font>
<font color="#009900">+@@ -40,7 +40,7 @@ void apt_build_db(PkBackend * backend, sqlite3 *db)</font>
<font color="#009900">+         sqlite3_stmt *package = NULL;</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates(backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         sdir = g_build_filename(_config-&gt;Find("Dir").c_str(),_config-&gt;Find("Dir::State").c_str(),_config-&gt;Find("Dir::State::lists").c_str(), NULL);</font>
<font color="#009900">+         dir = g_dir_open(sdir,0,&amp;error);</font>
<font color="#009900">+diff --git a/backends/apt/pk-sqlite-pkg-cache.cpp b/backends/apt/pk-sqlite-pkg-cache.cpp</font>
<font color="#009900">+index 770fcdf..1bf9a50 100644</font>
<font color="#009900">+--- a/backends/apt/pk-sqlite-pkg-cache.cpp</font>
<font color="#009900">++++ b/backends/apt/pk-sqlite-pkg-cache.cpp</font>
<font color="#009900">+@@ -81,7 +81,7 @@ sqlite_search_packages_thread (PkBackend *backend)</font>
<font color="#009900">+         const gchar *search;</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates(backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         type = pk_backend_get_uint (backend, "type");</font>
<font color="#009900">+         search = pk_backend_get_string (backend, "search");</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -176,7 +176,7 @@ sqlite_get_details_thread (PkBackend *backend)</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates(backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_debug("finding %s", pi-&gt;name);</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c</font>
<font color="#009900">+index b7b8167..9263781 100644</font>
<font color="#009900">+--- a/backends/box/pk-backend-box.c</font>
<font color="#009900">++++ b/backends/box/pk-backend-box.c</font>
<font color="#009900">+@@ -138,7 +138,7 @@ backend_find_packages_thread (PkBackend *backend)</font>
<font color="#009900">+                 filter_box = filter_box | PKG_SEARCH_DETAILS;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         db = db_open();</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c</font>
<font color="#009900">+index 49d4e5a..2df445e 100644</font>
<font color="#009900">+--- a/backends/dummy/pk-backend-dummy.c</font>
<font color="#009900">++++ b/backends/dummy/pk-backend-dummy.c</font>
<font color="#009900">+@@ -254,7 +254,7 @@ static void</font>
<font color="#009900">+ backend_get_updates (PkBackend *backend, PkFilterEnum filters)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         /* check network state */</font>
<font color="#009900">+         if (!pk_backend_is_online (backend)) {</font>
<font color="#009900">+                 pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot check when offline");</font>
<font color="#009900">+@@ -268,6 +268,8 @@ static gboolean</font>
<font color="#009900">+ backend_install_timeout (gpointer data)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         PkBackend *backend = (PkBackend *) data;</font>
<font color="#009900">++        guint sub_percent;</font>
<font color="#009900">++</font>
<font color="#009900">+         if (_progress_percentage == 100) {</font>
<font color="#009900">+                 pk_backend_finished (backend);</font>
<font color="#009900">+                 return FALSE;</font>
<font color="#009900">+@@ -283,9 +285,18 @@ backend_install_timeout (gpointer data)</font>
<font color="#009900">+                 pk_backend_package (backend, PK_INFO_ENUM_INSTALLING,</font>
<font color="#009900">+                                     "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora",</font>
<font color="#009900">+                                     "Devel files for gtkhtml");</font>
<font color="#009900">++                /* this duplicate package should be ignored */</font>
<font color="#009900">++                pk_backend_package (backend, PK_INFO_ENUM_INSTALLING,</font>
<font color="#009900">++                                    "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora", NULL);</font>
<font color="#009900">+                 pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);</font>
<font color="#009900">+         }</font>
<font color="#009900">+-        _progress_percentage += 10;</font>
<font color="#009900">++        if (_progress_percentage &gt; 30 &amp;&amp; _progress_percentage &lt; 50) {</font>
<font color="#009900">++                sub_percent = ((gfloat) (_progress_percentage - 30.0f) / 20.0f) * 100.0f;</font>
<font color="#009900">++                pk_backend_set_sub_percentage (backend, sub_percent);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                pk_backend_set_sub_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">++        }</font>
<font color="#009900">++        _progress_percentage += 1;</font>
<font color="#009900">+         pk_backend_set_percentage (backend, _progress_percentage);</font>
<font color="#009900">+         return TRUE;</font>
<font color="#009900">+ }</font>
<font color="#009900">+@@ -348,7 +359,7 @@ backend_install_packages (PkBackend *backend, gchar **package_ids)</font>
<font color="#009900">+         pk_backend_package (backend, PK_INFO_ENUM_DOWNLOADING,</font>
<font color="#009900">+                             "gtkhtml2;2.19.1-4.fc8;i386;fedora",</font>
<font color="#009900">+                             "An HTML widget for GTK+ 2.0");</font>
<font color="#009900">+-        _signal_timeout = g_timeout_add (1000, backend_install_timeout, backend);</font>
<font color="#009900">++        _signal_timeout = g_timeout_add (100, backend_install_timeout, backend);</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+@@ -526,7 +537,7 @@ backend_search_name_timeout (gpointer data)</font>
<font color="#009900">+ static void</font>
<font color="#009900">+ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         pk_backend_set_allow_cancel (backend, TRUE);</font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+         _signal_timeout = g_timeout_add (2000, backend_search_name_timeout, backend);</font>
<font color="#009900">+diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c</font>
<font color="#009900">+index ecc97be..7649bab 100644</font>
<font color="#009900">+--- a/backends/opkg/pk-backend-opkg.c</font>
<font color="#009900">++++ b/backends/opkg/pk-backend-opkg.c</font>
<font color="#009900">+@@ -155,6 +155,38 @@ pk_opkg_progress_cb (opkg_t *opkg, const opkg_progress_data_t *pdata, void *data</font>
<font color="#009900">+                 return;</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_percentage (backend, pdata-&gt;percentage);</font>
<font color="#009900">++        if (pdata-&gt;package)</font>
<font color="#009900">++        {</font>
<font color="#009900">++                gchar *uid;</font>
<font color="#009900">++                opkg_package_t *pkg = pdata-&gt;package;</font>
<font color="#009900">++                gint status = PK_INFO_ENUM_UNKNOWN;</font>
<font color="#009900">++</font>
<font color="#009900">++                uid = g_strdup_printf ("%s;%s;%s;",</font>
<font color="#009900">++                        pkg-&gt;name, pkg-&gt;version, pkg-&gt;architecture);</font>
<font color="#009900">++</font>
<font color="#009900">++                if (pdata-&gt;action == OPKG_DOWNLOAD)</font>
<font color="#009900">++                        status = PK_INFO_ENUM_DOWNLOADING;</font>
<font color="#009900">++                else if (pdata-&gt;action == OPKG_INSTALL)</font>
<font color="#009900">++                        status = PK_INFO_ENUM_INSTALLING;</font>
<font color="#009900">++                else if (pdata-&gt;action == OPKG_REMOVE)</font>
<font color="#009900">++                        status = PK_INFO_ENUM_REMOVING;</font>
<font color="#009900">++</font>
<font color="#009900">++                pk_backend_package (backend, status, uid, pkg-&gt;description);</font>
<font color="#009900">++                g_free (uid);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        switch (pdata-&gt;action)</font>
<font color="#009900">++        {</font>
<font color="#009900">++        case OPKG_DOWNLOAD:</font>
<font color="#009900">++                pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);</font>
<font color="#009900">++                break;</font>
<font color="#009900">++        case OPKG_INSTALL:</font>
<font color="#009900">++                pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);</font>
<font color="#009900">++                break;</font>
<font color="#009900">++        case OPKG_REMOVE:</font>
<font color="#009900">++                pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE);</font>
<font color="#009900">++                break;</font>
<font color="#009900">++        }</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+@@ -163,8 +195,12 @@ backend_refresh_cache_thread (PkBackend *backend)</font>
<font color="#009900">+         int ret;</font>
<font color="#009900">+ </font>
<font color="#009900">+         ret = opkg_update_package_lists (opkg, pk_opkg_progress_cb, backend);</font>
<font color="#009900">++</font>
<font color="#009900">+         if (ret) {</font>
<font color="#009900">+-                opkg_unknown_error (backend, ret, "Refreshing cache");</font>
<font color="#009900">++                if (ret == OPKG_DOWNLOAD_FAILED)</font>
<font color="#009900">++                        pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_AVAILABLE, NULL);</font>
<font color="#009900">++                else</font>
<font color="#009900">++                        opkg_unknown_error (backend, ret, "Refreshing cache");</font>
<font color="#009900">+         }</font>
<font color="#009900">+         pk_backend_finished (backend);</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -178,7 +214,7 @@ static void</font>
<font color="#009900">+ backend_refresh_cache (PkBackend *backend, gboolean force)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_REFRESH_CACHE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_thread_create (backend, backend_refresh_cache_thread);</font>
<font color="#009900">+@@ -279,7 +315,7 @@ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *sear</font>
<font color="#009900">+ </font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         params = g_new0 (SearchParams, 1);</font>
<font color="#009900">+         params-&gt;filters = filters;</font>
<font color="#009900">+@@ -301,7 +337,7 @@ backend_search_description (PkBackend *backend, PkFilterEnum filters, const gcha</font>
<font color="#009900">+ </font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         params = g_new0 (SearchParams, 1);</font>
<font color="#009900">+         params-&gt;filters = filters;</font>
<font color="#009900">+@@ -320,7 +356,7 @@ backend_search_group (PkBackend *backend, PkFilterEnum filters, const gchar *sea</font>
<font color="#009900">+ </font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         params = g_new0 (SearchParams, 1);</font>
<font color="#009900">+         params-&gt;filters = filters;</font>
<font color="#009900">+@@ -337,30 +373,52 @@ static gboolean</font>
<font color="#009900">+ backend_install_packages_thread (PkBackend *backend)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         PkPackageId *pi;</font>
<font color="#009900">+-        gint err;</font>
<font color="#009900">+-        const gchar *package_id;</font>
<font color="#009900">++        gint err, i;</font>
<font color="#009900">++        gchar **package_ids;</font>
<font color="#009900">+ </font>
<font color="#009900">+-        package_id = pk_backend_get_string (backend, "pkid");</font>
<font color="#009900">+-        pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_id, NULL);</font>
<font color="#009900">++        package_ids = pk_backend_get_strv (backend, "pkids");</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pi = pk_package_id_new_from_string (package_id);</font>
<font color="#009900">++        err = 0;</font>
<font color="#009900">++</font>
<font color="#009900">++        for (i = 0; package_ids[i]; i++)</font>
<font color="#009900">++        {</font>
<font color="#009900">++                pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_ids[0], NULL);</font>
<font color="#009900">+ </font>
<font color="#009900">+-        err = opkg_install_package (opkg, pi-&gt;name, pk_opkg_progress_cb, backend);</font>
<font color="#009900">+-        if (err != 0)</font>
<font color="#009900">+-                opkg_unknown_error (backend, err, "Install");</font>
<font color="#009900">++                pi = pk_package_id_new_from_string (package_ids[0]);</font>
<font color="#009900">++</font>
<font color="#009900">++                err = opkg_install_package (opkg, pi-&gt;name, pk_opkg_progress_cb, backend);</font>
<font color="#009900">++                switch (err)</font>
<font color="#009900">++                {</font>
<font color="#009900">++                case OPKG_NO_ERROR:</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                case OPKG_DEPENDANCIES_FAILED:</font>
<font color="#009900">++                        pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, NULL);</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                case OPKG_PACKAGE_ALREADY_INSTALLED:</font>
<font color="#009900">++                        pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ALREADY_INSTALLED, NULL);</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                case OPKG_PACKAGE_NOT_AVAILABLE:</font>
<font color="#009900">++                        pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL);</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                default:</font>
<font color="#009900">++                        opkg_unknown_error (backend, err, "Install");</font>
<font color="#009900">++                }</font>
<font color="#009900">++                pk_package_id_free (pi);</font>
<font color="#009900">++                if (err != 0)</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++        }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pk_package_id_free (pi);</font>
<font color="#009900">+         pk_backend_finished (backend);</font>
<font color="#009900">+         return (err == 0);</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ static void</font>
<font color="#009900">+-backend_install_packages (PkBackend *backend, gchar **package_id)</font>
<font color="#009900">++backend_install_packages (PkBackend *backend, gchar **package_ids)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pk_backend_set_string (backend, "pkid", package_id[0]);</font>
<font color="#009900">++        pk_backend_set_strv (backend, "pkids", package_ids);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_thread_create (backend, backend_install_packages_thread);</font>
<font color="#009900">+ }</font>
<font color="#009900">+@@ -369,7 +427,7 @@ static gboolean</font>
<font color="#009900">+ backend_remove_packages_thread (PkBackend *backend)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         PkPackageId *pi;</font>
<font color="#009900">+-        gint err;</font>
<font color="#009900">++        gint err, i;</font>
<font color="#009900">+         gchar **package_ids;</font>
<font color="#009900">+         gboolean allow_deps;</font>
<font color="#009900">+         gboolean autoremove;</font>
<font color="#009900">+@@ -382,19 +440,34 @@ backend_remove_packages_thread (PkBackend *backend)</font>
<font color="#009900">+         autoremove = GPOINTER_TO_INT (data[2]);</font>
<font color="#009900">+         g_free (data);</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pi = pk_package_id_new_from_string (package_ids[0]);</font>
<font color="#009900">+-        pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[0], NULL);</font>
<font color="#009900">+-</font>
<font color="#009900">+         opkg_set_option (opkg, "autoremove", &amp;autoremove);</font>
<font color="#009900">+         opkg_set_option (opkg, "force_removal_of_dependent_packages", &amp;allow_deps);</font>
<font color="#009900">+ </font>
<font color="#009900">+-        err = opkg_remove_package (opkg, pi-&gt;name, pk_opkg_progress_cb, backend);</font>
<font color="#009900">++        err = 0;</font>
<font color="#009900">+ </font>
<font color="#009900">+-        /* TODO: improve error reporting */</font>
<font color="#009900">+-        if (err != 0)</font>
<font color="#009900">+-                opkg_unknown_error (backend, err, "Remove");</font>
<font color="#009900">++        for (i = 0; package_ids[i]; i++)</font>
<font color="#009900">++        {</font>
<font color="#009900">++                pi = pk_package_id_new_from_string (package_ids[0]);</font>
<font color="#009900">++                pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[0], NULL);</font>
<font color="#009900">++</font>
<font color="#009900">++                err = opkg_remove_package (opkg, pi-&gt;name, pk_opkg_progress_cb, backend);</font>
<font color="#009900">++</font>
<font color="#009900">++                switch (err)</font>
<font color="#009900">++                {</font>
<font color="#009900">++                case OPKG_NO_ERROR:</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                case OPKG_PACKAGE_NOT_INSTALLED:</font>
<font color="#009900">++                        pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL);</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                default:</font>
<font color="#009900">++                        opkg_unknown_error (backend, err, "Remove");</font>
<font color="#009900">++                }</font>
<font color="#009900">++                pk_package_id_free (pi);</font>
<font color="#009900">++</font>
<font color="#009900">++                if (err != 0)</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++        }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pk_package_id_free (pi);</font>
<font color="#009900">+         pk_backend_finished (backend);</font>
<font color="#009900">+         return (err == 0);</font>
<font color="#009900">+ }</font>
<font color="#009900">+@@ -405,7 +478,7 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow</font>
<font color="#009900">+         gpointer *params;</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         /* params is a small array we can pack our thread parameters into */</font>
<font color="#009900">+         params = g_new0 (gpointer, 2);</font>
<font color="#009900">+@@ -450,7 +523,7 @@ static void</font>
<font color="#009900">+ backend_update_system (PkBackend *backend)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_thread_create (backend, backend_update_system_thread);</font>
<font color="#009900">+ }</font>
<font color="#009900">+@@ -478,8 +551,14 @@ backend_update_package_thread (PkBackend *backend)</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+         err = opkg_upgrade_package (opkg, pi-&gt;name, pk_opkg_progress_cb, backend);</font>
<font color="#009900">+-</font>
<font color="#009900">+-        if (err != 0) {</font>
<font color="#009900">++        switch (err)</font>
<font color="#009900">++        {</font>
<font color="#009900">++        case OPKG_NO_ERROR:</font>
<font color="#009900">++                break;</font>
<font color="#009900">++        case OPKG_PACKAGE_NOT_INSTALLED:</font>
<font color="#009900">++                pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL);</font>
<font color="#009900">++                break;</font>
<font color="#009900">++        default:</font>
<font color="#009900">+                 opkg_unknown_error (backend, err, "Update package");</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -494,7 +573,7 @@ backend_update_packages (PkBackend *backend, gchar **package_ids)</font>
<font color="#009900">+         gint i;</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         for (i = 0; package_ids[i]; i++) {</font>
<font color="#009900">+                 pk_backend_set_string (backend, "pkgid", package_ids[i]);</font>
<font color="#009900">+@@ -536,7 +615,7 @@ static void</font>
<font color="#009900">+ backend_get_updates (PkBackend *backend, PkFilterEnum filters)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_thread_create (backend, backend_get_updates_thread);</font>
<font color="#009900">+ }</font>
<font color="#009900">+@@ -572,19 +651,26 @@ backend_get_details_thread (PkBackend *backend)</font>
<font color="#009900">+         if (pi == NULL)</font>
<font color="#009900">+         {</font>
<font color="#009900">+                 pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");</font>
<font color="#009900">+-                pk_package_id_free (pi);</font>
<font color="#009900">++                pk_backend_finished (backend);</font>
<font color="#009900">+                 return FALSE;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+ </font>
<font color="#009900">+         pkg = opkg_find_package (opkg, pi-&gt;name, pi-&gt;version, pi-&gt;arch, pi-&gt;data);</font>
<font color="#009900">++        pk_package_id_free (pi);</font>
<font color="#009900">++</font>
<font color="#009900">++        if (!pkg)</font>
<font color="#009900">++        {</font>
<font color="#009900">++                pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL);</font>
<font color="#009900">++                pk_backend_finished (backend);</font>
<font color="#009900">++                return FALSE;</font>
<font color="#009900">++        }</font>
<font color="#009900">+ </font>
<font color="#009900">+         newid = g_strdup_printf ("%s;%s;%s;%s", pkg-&gt;name, pkg-&gt;version, pkg-&gt;architecture, pkg-&gt;repository);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_details (backend, newid, NULL, 0, pkg-&gt;description, pkg-&gt;url, pkg-&gt;size);</font>
<font color="#009900">+ </font>
<font color="#009900">+         g_free (newid);</font>
<font color="#009900">+-        pk_package_id_free (pi);</font>
<font color="#009900">+         pk_backend_finished (backend);</font>
<font color="#009900">+         return TRUE;</font>
<font color="#009900">+ }</font>
<font color="#009900">+@@ -592,7 +678,7 @@ backend_get_details_thread (PkBackend *backend)</font>
<font color="#009900">+ static void</font>
<font color="#009900">+ backend_get_details (PkBackend *backend, const gchar *package_id)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         pk_backend_thread_create (backend, backend_get_details_thread);</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/backends/test/pk-backend-test-dbus.c b/backends/test/pk-backend-test-dbus.c</font>
<font color="#009900">+index 5dfea32..76686dc 100644</font>
<font color="#009900">+--- a/backends/test/pk-backend-test-dbus.c</font>
<font color="#009900">++++ b/backends/test/pk-backend-test-dbus.c</font>
<font color="#009900">+@@ -36,7 +36,7 @@ static void</font>
<font color="#009900">+ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         pk_backend_set_allow_cancel (backend, TRUE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         pk_backend_dbus_search_name (dbus, filters, search);</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/backends/test/pk-backend-test-spawn.c b/backends/test/pk-backend-test-spawn.c</font>
<font color="#009900">+index 2958c05..584f44c 100644</font>
<font color="#009900">+--- a/backends/test/pk-backend-test-spawn.c</font>
<font color="#009900">++++ b/backends/test/pk-backend-test-spawn.c</font>
<font color="#009900">+@@ -35,7 +35,7 @@ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *sear</font>
<font color="#009900">+ {</font>
<font color="#009900">+         gchar *filters_text;</font>
<font color="#009900">+         pk_backend_set_allow_cancel (backend, TRUE);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         filters_text = pk_filter_enums_to_text (filters);</font>
<font color="#009900">+         pk_backend_spawn_helper (spawn, "search-name.sh", filters_text, search, NULL);</font>
<font color="#009900">+         g_free (filters_text);</font>
<font color="#009900">+diff --git a/backends/test/pk-backend-test-succeed.c b/backends/test/pk-backend-test-succeed.c</font>
<font color="#009900">+index 17cdc6e..c046c1d 100644</font>
<font color="#009900">+--- a/backends/test/pk-backend-test-succeed.c</font>
<font color="#009900">++++ b/backends/test/pk-backend-test-succeed.c</font>
<font color="#009900">+@@ -236,7 +236,7 @@ backend_search_name_timeout (gpointer data)</font>
<font color="#009900">+ static void</font>
<font color="#009900">+ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         g_timeout_add (200000, backend_search_name_timeout, backend);</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py</font>
<font color="#009900">+index f76e27c..5b2da8f 100644</font>
<font color="#009900">+--- a/backends/yum/helpers/yumBackend.py</font>
<font color="#009900">++++ b/backends/yum/helpers/yumBackend.py</font>
<font color="#009900">+@@ -801,6 +801,8 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+         old_throttle = self.yumbase.conf.throttle</font>
<font color="#009900">+         self.yumbase.conf.throttle = "60%" # Set bandwidth throttle to 60%</font>
<font color="#009900">+                                            # to avoid taking all the system's bandwidth.</font>
<font color="#009900">++        old_skip_broken = self.yumbase.conf.skip_broken</font>
<font color="#009900">++        self.yumbase.conf.skip_broken = 1</font>
<font color="#009900">+ </font>
<font color="#009900">+         try:</font>
<font color="#009900">+             txmbr = self.yumbase.update() # Add all updates to Transaction</font>
<font color="#009900">+@@ -812,6 +814,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+             self.error(ERROR_NO_PACKAGES_TO_UPDATE,"Nothing to do")</font>
<font color="#009900">+ </font>
<font color="#009900">+         self.yumbase.conf.throttle = old_throttle</font>
<font color="#009900">++        self.yumbase.conf.skip_broken = old_skip_broken</font>
<font color="#009900">+ </font>
<font color="#009900">+     def refresh_cache(self):</font>
<font color="#009900">+         '''</font>
<font color="#009900">+@@ -905,7 +908,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+         if txmbrs:</font>
<font color="#009900">+             self._runYumTransaction()</font>
<font color="#009900">+         else:</font>
<font color="#009900">+-            self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This package could not be installed as it is already installed")</font>
<font color="#009900">++            self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package is already installed")</font>
<font color="#009900">+ </font>
<font color="#009900">+     def _checkForNewer(self,po):</font>
<font color="#009900">+         pkgs = self.yumbase.pkgSack.returnNewestByName(name=po.name)</font>
<font color="#009900">+@@ -1003,7 +1006,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+             return False</font>
<font color="#009900">+ </font>
<font color="#009900">+         if self._is_inst(po):</font>
<font color="#009900">+-            self.error(ERROR_PACKAGE_ALREADY_INSTALLED, "%s is already installed" % str(po))</font>
<font color="#009900">++            self.error(ERROR_PACKAGE_ALREADY_INSTALLED, "The package %s is already installed" % str(po))</font>
<font color="#009900">+             return False</font>
<font color="#009900">+ </font>
<font color="#009900">+         if len(self.yumbase.conf.exclude) &gt; 0:</font>
<font color="#009900">+diff --git a/backends/yum2/helpers/testyum2.py b/backends/yum2/helpers/testyum2.py</font>
<font color="#009900">+index cdec507..85b47f9 100755</font>
<font color="#009900">+--- a/backends/yum2/helpers/testyum2.py</font>
<font color="#009900">++++ b/backends/yum2/helpers/testyum2.py</font>
<font color="#009900">+@@ -80,7 +80,7 @@ try:</font>
<font color="#009900">+         #iface.GetPackages(FILTER_INSTALLED,'no')</font>
<font color="#009900">+     if cmd == 'get-repolist' or cmd == 'all':</font>
<font color="#009900">+         print "Testing GetRepoList()"</font>
<font color="#009900">+-        iface.GetRepoList()</font>
<font color="#009900">++        iface.GetRepoList("")</font>
<font color="#009900">+     if cmd == 'get-updatedetail' or cmd == 'all':</font>
<font color="#009900">+         print "Testing GetUpdateDetail(PKG_ID)"</font>
<font color="#009900">+         iface.GetUpdateDetail(PKG_ID)</font>
<font color="#009900">+diff --git a/backends/yum2/helpers/yumDBUSBackend.py b/backends/yum2/helpers/yumDBUSBackend.py</font>
<font color="#009900">+index 9cfed94..29f5b03 100755</font>
<font color="#009900">+--- a/backends/yum2/helpers/yumDBUSBackend.py</font>
<font color="#009900">++++ b/backends/yum2/helpers/yumDBUSBackend.py</font>
<font color="#009900">+@@ -434,7 +434,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+         try:</font>
<font color="#009900">+             pkgGroupDict = self._buildGroupDict()</font>
<font color="#009900">+             fltlist = filters.split(';')</font>
<font color="#009900">+-            found = {}</font>
<font color="#009900">++            installed_nevra = [] # yum returns packages as available even when installed</font>
<font color="#009900">+ </font>
<font color="#009900">+             if not FILTER_NOT_INSTALLED in fltlist:</font>
<font color="#009900">+                 # Check installed for group</font>
<font color="#009900">+@@ -450,21 +450,31 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+                             group = groupMap[cg]           # use the pk group name, instead of yum 'category/group'</font>
<font color="#009900">+                     if group == key:</font>
<font color="#009900">+                         if self._do_extra_filtering(pkg, fltlist):</font>
<font color="#009900">+-                            self._show_package(pkg, INFO_INSTALLED)</font>
<font color="#009900">++                            package_list.append((pkg,INFO_INSTALLED))</font>
<font color="#009900">++                    installed_nevra.append(self._get_nevra(pkg))                        </font>
<font color="#009900">++</font>
<font color="#009900">+             if not FILTER_INSTALLED in fltlist:</font>
<font color="#009900">+                 # Check available for group</font>
<font color="#009900">+                 for pkg in self.yumbase.pkgSack:</font>
<font color="#009900">+                     if self._cancel_check("Search cancelled."):</font>
<font color="#009900">+                         # _cancel_check() sets the error message, unlocks yum, and calls Finished()</font>
<font color="#009900">+                         return</font>
<font color="#009900">+-                    group = GROUP_OTHER</font>
<font color="#009900">+-                    if pkgGroupDict.has_key(pkg.name):</font>
<font color="#009900">+-                        cg = pkgGroupDict[pkg.name]</font>
<font color="#009900">+-                        if groupMap.has_key(cg):</font>
<font color="#009900">+-                            group = groupMap[cg]</font>
<font color="#009900">+-                    if group == key:</font>
<font color="#009900">+-                        if self._do_extra_filtering(pkg, fltlist):</font>
<font color="#009900">+-                            self._show_package(pkg, INFO_AVAILABLE)</font>
<font color="#009900">++</font>
<font color="#009900">++                    nevra = self._get_nevra(pkg)</font>
<font color="#009900">++                    if nevra not in installed_nevra:</font>
<font color="#009900">++                        group = GROUP_OTHER</font>
<font color="#009900">++                        if pkgGroupDict.has_key(pkg.name):</font>
<font color="#009900">++                            cg = pkgGroupDict[pkg.name]</font>
<font color="#009900">++                            if groupMap.has_key(cg):</font>
<font color="#009900">++                                group = groupMap[cg]</font>
<font color="#009900">++                        if group == key:</font>
<font color="#009900">++                            if self._do_extra_filtering(pkg, fltlist):</font>
<font color="#009900">++                                package_list.append((pkg,INFO_AVAILABLE))</font>
<font color="#009900">++</font>
<font color="#009900">++        except yum.Errors.GroupsError,e:</font>
<font color="#009900">++            self._unlock_yum()</font>
<font color="#009900">++            self.ErrorCode(ERROR_GROUP_NOT_FOUND, str(e))</font>
<font color="#009900">++            self.Finished(EXIT_FAILED)</font>
<font color="#009900">+         except yum.Errors.RepoError,e:</font>
<font color="#009900">+             self.Message(MESSAGE_NOTICE, "The package cache is invalid and is being rebuilt.")</font>
<font color="#009900">+             self._refresh_yum_cache()</font>
<font color="#009900">+@@ -473,6 +483,14 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+ </font>
<font color="#009900">+             return</font>
<font color="#009900">+ </font>
<font color="#009900">++        # basename filter if specified</font>
<font color="#009900">++        if FILTER_BASENAME in fltlist:</font>
<font color="#009900">++            for (pkg,status) in self._basename_filter(package_list):</font>
<font color="#009900">++                self._show_package(pkg,status)</font>
<font color="#009900">++        else:</font>
<font color="#009900">++            for (pkg,status) in package_list:</font>
<font color="#009900">++                self._show_package(pkg,status)</font>
<font color="#009900">++</font>
<font color="#009900">+         self._unlock_yum()</font>
<font color="#009900">+         self.Finished(EXIT_SUCCESS)</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -724,6 +742,11 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+             #we might have a rounding error</font>
<font color="#009900">+             self.PercentageChanged(100)</font>
<font color="#009900">+ </font>
<font color="#009900">++        except yum.Errors.RepoError,e:</font>
<font color="#009900">++            self._unlock_yum()</font>
<font color="#009900">++            self.ErrorCode(ERROR_REPO_CONFIGURATION_ERROR,str(e))</font>
<font color="#009900">++            self.Finished(EXIT_FAILED)</font>
<font color="#009900">++            self.Exit()</font>
<font color="#009900">+         except yum.Errors.YumBaseError, e:</font>
<font color="#009900">+             self._unlock_yum()</font>
<font color="#009900">+             # This should be a better-defined error, but I'm not sure</font>
<font color="#009900">+@@ -837,6 +860,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+         Needed to be implemented in a sub class</font>
<font color="#009900">+         '''</font>
<font color="#009900">+         if inst_file.endswith('.src.rpm'):</font>
<font color="#009900">++            self._unlock_yum()</font>
<font color="#009900">+             self.ErrorCode(ERROR_CANNOT_INSTALL_SOURCE_PACKAGE,'Backend will not install a src rpm file')</font>
<font color="#009900">+             self.Finished(EXIT_FAILED)</font>
<font color="#009900">+             return</font>
<font color="#009900">+@@ -1385,30 +1409,30 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+             res = self.yumbase.searchGenerator(searchlist, [key])</font>
<font color="#009900">+             fltlist = filters.split(';')</font>
<font color="#009900">+ </font>
<font color="#009900">+-            available = []</font>
<font color="#009900">+-            count = 1</font>
<font color="#009900">++            seen_nevra = [] # yum returns packages as available even when installed</font>
<font color="#009900">++            pkg_list = [] # only do the second iteration on not installed pkgs</font>
<font color="#009900">++            package_list = [] #we can't do emitting as found if we are post-processing</font>
<font color="#009900">++</font>
<font color="#009900">+             for (pkg,values) in res:</font>
<font color="#009900">+                 if self._cancel_check("Search cancelled."):</font>
<font color="#009900">+                     return False</font>
<font color="#009900">+                 # are we installed?</font>
<font color="#009900">+                 if pkg.repo.id == 'installed':</font>
<font color="#009900">+-                    if FILTER_NOT_INSTALLED not in fltlist:</font>
<font color="#009900">+-                        if self._do_extra_filtering(pkg,fltlist):</font>
<font color="#009900">+-                            count+=1</font>
<font color="#009900">+-                            if count &gt; 100:</font>
<font color="#009900">+-                                break</font>
<font color="#009900">+-                            self._show_package(pkg, INFO_INSTALLED)</font>
<font color="#009900">++                    if self._do_extra_filtering(pkg,fltlist):</font>
<font color="#009900">++                        package_list.append((pkg,INFO_INSTALLED))</font>
<font color="#009900">++                        seen_nevra.append(self._get_nevra(pkg))</font>
<font color="#009900">+                 else:</font>
<font color="#009900">+-                    available.append(pkg)</font>
<font color="#009900">++                    pkg_list.append(pkg)</font>
<font color="#009900">+ </font>
<font color="#009900">+-            # Now show available packages.</font>
<font color="#009900">+-            if FILTER_INSTALLED not in fltlist:</font>
<font color="#009900">+-                for pkg in available:</font>
<font color="#009900">+-                    if self._cancel_check("Search cancelled."):</font>
<font color="#009900">+-                        return False</font>
<font color="#009900">+-                    if self._do_extra_filtering(pkg,fltlist):</font>
<font color="#009900">+-                        self._show_package(pkg, INFO_AVAILABLE)</font>
<font color="#009900">++            for pkg in pkg_list:</font>
<font color="#009900">++                if self._cancel_check("Search cancelled."):</font>
<font color="#009900">++                    return False</font>
<font color="#009900">+ </font>
<font color="#009900">++                nevra = self._get_nevra(pkg)</font>
<font color="#009900">++                if nevra not in seen_nevra:</font>
<font color="#009900">++                    if self._do_extra_filtering(pkg,fltlist):</font>
<font color="#009900">++                        package_list.append((pkg,INFO_AVAILABLE))</font>
<font color="#009900">++                        seen_nevra.append(self._get_nevra(pkg))</font>
<font color="#009900">+         except yum.Errors.RepoError,e:</font>
<font color="#009900">+             self.Message(MESSAGE_NOTICE, "The package cache is invalid and is being rebuilt.")</font>
<font color="#009900">+             self._refresh_yum_cache()</font>
<font color="#009900">+@@ -1417,13 +1441,22 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+ </font>
<font color="#009900">+             return False</font>
<font color="#009900">+ </font>
<font color="#009900">++        # basename filter if specified</font>
<font color="#009900">++        if FILTER_BASENAME in fltlist:</font>
<font color="#009900">++            for (pkg,status) in self._basename_filter(package_list):</font>
<font color="#009900">++                self._show_package(pkg,status)</font>
<font color="#009900">++        else:</font>
<font color="#009900">++            for (pkg,status) in package_list:</font>
<font color="#009900">++                self._show_package(pkg,status)</font>
<font color="#009900">++</font>
<font color="#009900">+         return True</font>
<font color="#009900">+ </font>
<font color="#009900">+     def _do_extra_filtering(self,pkg,filterList):</font>
<font color="#009900">+         ''' do extra filtering (gui,devel etc) '''</font>
<font color="#009900">+         for filter in filterList:</font>
<font color="#009900">+             if filter in (FILTER_INSTALLED, FILTER_NOT_INSTALLED):</font>
<font color="#009900">+-                continue</font>
<font color="#009900">++                if not self._do_installed_filtering(filter,pkg):</font>
<font color="#009900">++                    return False</font>
<font color="#009900">+             elif filter in (FILTER_GUI, FILTER_NOT_GUI):</font>
<font color="#009900">+                 if not self._do_gui_filtering(filter, pkg):</font>
<font color="#009900">+                     return False</font>
<font color="#009900">+@@ -1433,11 +1466,17 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+             elif filter in (FILTER_FREE, FILTER_NOT_FREE):</font>
<font color="#009900">+                 if not self._do_free_filtering(filter, pkg):</font>
<font color="#009900">+                     return False</font>
<font color="#009900">+-            elif filter in (FILTER_BASENAME, FILTER_NOT_BASENAME):</font>
<font color="#009900">+-                if not self._do_basename_filtering(filter, pkg):</font>
<font color="#009900">+-                    return False</font>
<font color="#009900">+         return True</font>
<font color="#009900">+ </font>
<font color="#009900">++    def _do_installed_filtering(self,flt,pkg):</font>
<font color="#009900">++        isInstalled = False</font>
<font color="#009900">++        if flt == FILTER_INSTALLED:</font>
<font color="#009900">++            wantInstalled = True</font>
<font color="#009900">++        else:</font>
<font color="#009900">++            wantInstalled = False</font>
<font color="#009900">++        isInstalled = pkg.repo.id == 'installed'</font>
<font color="#009900">++        return isInstalled == wantInstalled</font>
<font color="#009900">++</font>
<font color="#009900">+     def _do_gui_filtering(self,flt,pkg):</font>
<font color="#009900">+         isGUI = False</font>
<font color="#009900">+         if flt == FILTER_GUI:</font>
<font color="#009900">+@@ -1477,32 +1516,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+ </font>
<font color="#009900">+         return isFree == wantFree</font>
<font color="#009900">+ </font>
<font color="#009900">+-    def _do_basename_filtering(self,flt,pkg):</font>
<font color="#009900">+-        if flt == FILTER_BASENAME:</font>
<font color="#009900">+-            wantBase = True</font>
<font color="#009900">+-        else:</font>
<font color="#009900">+-            wantBase = False</font>
<font color="#009900">+-</font>
<font color="#009900">+-        isBase = self._check_basename(pkg)</font>
<font color="#009900">+-</font>
<font color="#009900">+-        return isBase == wantBase</font>
<font color="#009900">+ </font>
<font color="#009900">+-    def _check_basename(self, pkg):</font>
<font color="#009900">+-        '''</font>
<font color="#009900">+-        If a package does not have a source rpm (If that ever</font>
<font color="#009900">+-        happens), or it does have a source RPM, and the package's name</font>
<font color="#009900">+-        is the same as the source RPM's name, then we assume it is the</font>
<font color="#009900">+-        'base' package.</font>
<font color="#009900">+-        '''</font>
<font color="#009900">+-        basename = pkg.name</font>
<font color="#009900">+-</font>
<font color="#009900">+-        if pkg.sourcerpm:</font>
<font color="#009900">+-            basename = rpmUtils.miscutils.splitFilename(pkg.sourcerpm)[0]</font>
<font color="#009900">+-</font>
<font color="#009900">+-        if basename == pkg.name:</font>
<font color="#009900">+-            return True</font>
<font color="#009900">+-</font>
<font color="#009900">+-        return False</font>
<font color="#009900">+ </font>
<font color="#009900">+     def _is_development_repo(self, repo):</font>
<font color="#009900">+         if repo.endswith('-debuginfo'):</font>
<font color="#009900">+@@ -1576,28 +1590,41 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+         '''</font>
<font color="#009900">+         find a package based on a package id (name;version;arch;repoid)</font>
<font color="#009900">+         '''</font>
<font color="#009900">+-        # Split up the id</font>
<font color="#009900">+-        (n,idver,a,d) = self.get_package_from_id(id)</font>
<font color="#009900">+-        # get e,v,r from package id version</font>
<font color="#009900">+-        e,v,r = self._getEVR(idver)</font>
<font color="#009900">++        # is this an real id or just an name</font>
<font color="#009900">++        if len(id.split(';')) &gt; 1:</font>
<font color="#009900">++            # Split up the id</font>
<font color="#009900">++            (n,idver,a,d) = self.get_package_from_id(id)</font>
<font color="#009900">++            # get e,v,r from package id version</font>
<font color="#009900">++            e,v,r = self._getEVR(idver)</font>
<font color="#009900">++        else:</font>
<font color="#009900">++            n = id</font>
<font color="#009900">++            e = v = r = a = None</font>
<font color="#009900">+         # search the rpmdb for the nevra</font>
<font color="#009900">+         pkgs = self.yumbase.rpmdb.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a)</font>
<font color="#009900">+-        # if the package is found, then return it</font>
<font color="#009900">++        # if the package is found, then return it (do not have to match the repo_id)</font>
<font color="#009900">+         if len(pkgs) != 0:</font>
<font color="#009900">+             return pkgs[0],True</font>
<font color="#009900">+         # search the pkgSack for the nevra</font>
<font color="#009900">+-        pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a)</font>
<font color="#009900">+-        # if the package is found, then return it</font>
<font color="#009900">+-        if len(pkgs) != 0:</font>
<font color="#009900">+-            return pkgs[0],False</font>
<font color="#009900">+-        else:</font>
<font color="#009900">++        try:</font>
<font color="#009900">++            pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a)</font>
<font color="#009900">++        except yum.Errors.RepoError,e:</font>
<font color="#009900">++            self.error(ERROR_REPO_NOT_AVAILABLE,str(e))</font>
<font color="#009900">++        # nothing found</font>
<font color="#009900">++        if len(pkgs) == 0:</font>
<font color="#009900">+             return None,False</font>
<font color="#009900">++        # one NEVRA in a single repo</font>
<font color="#009900">++        if len(pkgs) == 1:</font>
<font color="#009900">++            return pkgs[0],False</font>
<font color="#009900">++        # we might have the same NEVRA in multiple repos, match by repo name</font>
<font color="#009900">++        for pkg in pkgs:</font>
<font color="#009900">++            if d == pkg.repoid:</font>
<font color="#009900">++                return pkg,False</font>
<font color="#009900">++        # repo id did not match</font>
<font color="#009900">++        return None,False</font>
<font color="#009900">+ </font>
<font color="#009900">+     def _is_inst(self,pkg):</font>
<font color="#009900">+         return self.yumbase.rpmdb.installed(po=pkg)</font>
<font color="#009900">+ </font>
<font color="#009900">+-</font>
<font color="#009900">+-</font>
<font color="#009900">+     def _installable(self, pkg, ematch=False):</font>
<font color="#009900">+ </font>
<font color="#009900">+         """check if the package is reasonably installable, true/false"""</font>
<font color="#009900">+@@ -1764,6 +1791,57 @@ class PackageKitYumBackend(PackageKitBaseBackend):</font>
<font color="#009900">+             return INFO_ENHANCEMENT</font>
<font color="#009900">+         else:</font>
<font color="#009900">+             return INFO_UNKNOWN</font>
<font color="#009900">++    def _is_main_package(self,repo):</font>
<font color="#009900">++        if repo.endswith('-debuginfo'):</font>
<font color="#009900">++            return False</font>
<font color="#009900">++        if repo.endswith('-devel'):</font>
<font color="#009900">++            return False</font>
<font color="#009900">++        if repo.endswith('-libs'):</font>
<font color="#009900">++            return False</font>
<font color="#009900">++        return True</font>
<font color="#009900">++</font>
<font color="#009900">++    def _basename_filter(self,package_list):</font>
<font color="#009900">++        '''</font>
<font color="#009900">++        Filter the list so that the number of packages are reduced.</font>
<font color="#009900">++        This is done by only displaying gtk2 rather than gtk2-devel, gtk2-debuginfo, etc.</font>
<font color="#009900">++        This imlementation is done by comparing the SRPM name, and if not falling back</font>
<font color="#009900">++        to the first entry.</font>
<font color="#009900">++        We have to fall back else we don't emit packages where the SRPM does not produce a</font>
<font color="#009900">++        RPM with the same name, for instance, mono produces mono-core, mono-data and mono-winforms.</font>
<font color="#009900">++        @package_list: a (pkg,status) list of packages</font>
<font color="#009900">++        A new list is returned that has been filtered</font>
<font color="#009900">++        '''</font>
<font color="#009900">++        base_list = []</font>
<font color="#009900">++        output_list = []</font>
<font color="#009900">++        base_list_already_got = []</font>
<font color="#009900">++</font>
<font color="#009900">++        #find out the srpm name and add to a new array of compound data</font>
<font color="#009900">++        for (pkg,status) in package_list:</font>
<font color="#009900">++            if pkg.sourcerpm:</font>
<font color="#009900">++                base = rpmUtils.miscutils.splitFilename(pkg.sourcerpm)[0]</font>
<font color="#009900">++                base_list.append ((pkg,status,base,pkg.version));</font>
<font color="#009900">++            else:</font>
<font color="#009900">++                base_list.append ((pkg,status,'nosrpm',pkg.version));</font>
<font color="#009900">++</font>
<font color="#009900">++        #find all the packages that match thier basename name (done seporately so we get the "best" match)</font>
<font color="#009900">++        for (pkg,status,base,version) in base_list:</font>
<font color="#009900">++            if base == pkg.name and (base,version) not in base_list_already_got:</font>
<font color="#009900">++                output_list.append((pkg,status))</font>
<font color="#009900">++                base_list_already_got.append ((base,version))</font>
<font color="#009900">++</font>
<font color="#009900">++        #for all the ones not yet got, can we match against a non devel match?</font>
<font color="#009900">++        for (pkg,status,base,version) in base_list:</font>
<font color="#009900">++            if (base,version) not in base_list_already_got:</font>
<font color="#009900">++                if self._is_main_package(pkg.name):</font>
<font color="#009900">++                    output_list.append((pkg,status))</font>
<font color="#009900">++                    base_list_already_got.append ((base,version))</font>
<font color="#009900">++</font>
<font color="#009900">++        #add the remainder of the packages, which should just be the single debuginfo's</font>
<font color="#009900">++        for (pkg,status,base,version) in base_list:</font>
<font color="#009900">++            if (base,version) not in base_list_already_got:</font>
<font color="#009900">++                output_list.append((pkg,status))</font>
<font color="#009900">++                base_list_already_got.append ((base,version))</font>
<font color="#009900">++        return output_list</font>
<font color="#009900">+ </font>
<font color="#009900">+     def _get_obsoleted(self,name):</font>
<font color="#009900">+         obsoletes = self.yumbase.up.getObsoletesTuples( newest=1 )</font>
<font color="#009900">+diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp</font>
<font color="#009900">+index 746da82..15c4b4f 100644</font>
<font color="#009900">+--- a/backends/zypp/pk-backend-zypp.cpp</font>
<font color="#009900">++++ b/backends/zypp/pk-backend-zypp.cpp</font>
<font color="#009900">+@@ -1170,7 +1170,7 @@ backend_find_packages_thread (PkBackend *backend)</font>
<font color="#009900">+         mode = pk_backend_get_uint (backend, "mode");</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend);</font>
<font color="#009900">++        pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+ </font>
<font color="#009900">+         std::vector&lt;zypp::sat::Solvable&gt; *v = new std::vector&lt;zypp::sat::Solvable&gt;;</font>
<font color="#009900">+         std::vector&lt;zypp::sat::Solvable&gt; *v2 = new std::vector&lt;zypp::sat::Solvable&gt;;</font>
<font color="#009900">+diff --git a/client/pk-console.c b/client/pk-console.c</font>
<font color="#009900">+index 8f69068..5a05a8e 100644</font>
<font color="#009900">+--- a/client/pk-console.c</font>
<font color="#009900">++++ b/client/pk-console.c</font>
<font color="#009900">+@@ -50,7 +50,7 @@ static gboolean awaiting_space = FALSE;</font>
<font color="#009900">+ static gboolean trusted = TRUE;</font>
<font color="#009900">+ static guint timer_id = 0;</font>
<font color="#009900">+ static guint percentage_last = 0;</font>
<font color="#009900">+-static gchar *filename = NULL;</font>
<font color="#009900">++static gchar **files_cache = NULL;</font>
<font color="#009900">+ static PkControl *control = NULL;</font>
<font color="#009900">+ static PkClient *client = NULL;</font>
<font color="#009900">+ static PkClient *client_task = NULL;</font>
<font color="#009900">+@@ -494,6 +494,12 @@ pk_console_perhaps_resolve (PkClient *client, PkFilterEnum filter, const gchar *</font>
<font color="#009900">+                 return g_strdup (package);</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">++        ret = pk_client_reset (client_task, error);</font>
<font color="#009900">++        if (ret == FALSE) {</font>
<font color="#009900">++                pk_warning ("failed to reset client task");</font>
<font color="#009900">++                return NULL;</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">+         /* we need to resolve it */</font>
<font color="#009900">+         ret = pk_client_resolve (client_task, filter, package, error);</font>
<font color="#009900">+         if (ret == FALSE) {</font>
<font color="#009900">+@@ -549,20 +555,93 @@ pk_console_perhaps_resolve (PkClient *client, PkFilterEnum filter, const gchar *</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+- * pk_console_install_package:</font>
<font color="#009900">++ * pk_console_install_stuff:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+-pk_console_install_package (PkClient *client, const gchar *package, GError **error)</font>
<font color="#009900">++pk_console_install_stuff (PkClient *client, gchar **packages, GError **error)</font>
<font color="#009900">+ {</font>
<font color="#009900">+-        gboolean ret;</font>
<font color="#009900">+-        gchar *package_id;</font>
<font color="#009900">+-        package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_NOT_INSTALLED, package, error);</font>
<font color="#009900">+-        if (package_id == NULL) {</font>
<font color="#009900">+-                g_print ("%s\n", _("Could not find a package with that name to install, or package already installed"));</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">++        gboolean ret = TRUE;</font>
<font color="#009900">++        gboolean is_local;</font>
<font color="#009900">++        gchar *package_id = NULL;</font>
<font color="#009900">++        gchar **package_ids = NULL;</font>
<font color="#009900">++        gchar **files = NULL;</font>
<font color="#009900">++        guint i;</font>
<font color="#009900">++        guint length;</font>
<font color="#009900">++        GPtrArray *array_packages;</font>
<font color="#009900">++        GPtrArray *array_files;</font>
<font color="#009900">++</font>
<font color="#009900">++        array_packages = g_ptr_array_new ();</font>
<font color="#009900">++        array_files = g_ptr_array_new ();</font>
<font color="#009900">++        length = g_strv_length (packages);</font>
<font color="#009900">++        for (i=2; i&lt;length; i++) {</font>
<font color="#009900">++                is_local = g_file_test (packages[i], G_FILE_TEST_EXISTS);</font>
<font color="#009900">++                if (is_local) {</font>
<font color="#009900">++                        g_ptr_array_add (array_files, g_strdup (packages[i]));</font>
<font color="#009900">++                } else {</font>
<font color="#009900">++                        package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_NOT_INSTALLED, packages[i], error);</font>
<font color="#009900">++                        if (package_id == NULL) {</font>
<font color="#009900">++                                g_print ("%s\n", _("Could not find a package with that name to install, or package already installed"));</font>
<font color="#009900">++                                ret = FALSE;</font>
<font color="#009900">++                                break;</font>
<font color="#009900">++                        }</font>
<font color="#009900">++                        g_ptr_array_add (array_packages, package_id);</font>
<font color="#009900">++                }</font>
<font color="#009900">+         }</font>
<font color="#009900">+-        ret = pk_client_install_package (client, package_id, error);</font>
<font color="#009900">+-        g_free (package_id);</font>
<font color="#009900">++</font>
<font color="#009900">++        /* one of the resolves failed */</font>
<font color="#009900">++        if (!ret) {</font>
<font color="#009900">++                pk_warning ("resolve failed");</font>
<font color="#009900">++                goto out;</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++</font>
<font color="#009900">++        /* any to process? */</font>
<font color="#009900">++        if (array_packages-&gt;len &gt; 0) {</font>
<font color="#009900">++                /* convert to strv */</font>
<font color="#009900">++                package_ids = pk_ptr_array_to_argv (array_packages);</font>
<font color="#009900">++</font>
<font color="#009900">++                /* reset */</font>
<font color="#009900">++                ret = pk_client_reset (client, error);</font>
<font color="#009900">++                if (!ret) {</font>
<font color="#009900">++                        pk_warning ("failed to reset");</font>
<font color="#009900">++                        goto out;</font>
<font color="#009900">++                }</font>
<font color="#009900">++</font>
<font color="#009900">++                ret = pk_client_install_package (client, package_id, error);</font>
<font color="#009900">++                if (!ret) {</font>
<font color="#009900">++                        pk_warning ("failed to install packages");</font>
<font color="#009900">++                        goto out;</font>
<font color="#009900">++                }</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /* any to process? */</font>
<font color="#009900">++        if (array_files-&gt;len &gt; 0) {</font>
<font color="#009900">++                /* convert to strv */</font>
<font color="#009900">++                files = pk_ptr_array_to_argv (array_files);</font>
<font color="#009900">++</font>
<font color="#009900">++                /* save for untrusted callback */</font>
<font color="#009900">++                g_strfreev (files_cache);</font>
<font color="#009900">++                files_cache = g_strdupv (files);</font>
<font color="#009900">++</font>
<font color="#009900">++                /* reset */</font>
<font color="#009900">++                ret = pk_client_reset (client, error);</font>
<font color="#009900">++                if (!ret) {</font>
<font color="#009900">++                        pk_warning ("failed to reset");</font>
<font color="#009900">++                        goto out;</font>
<font color="#009900">++                }</font>
<font color="#009900">++</font>
<font color="#009900">++                ret = pk_client_install_files (client, trusted, files, error);</font>
<font color="#009900">++                if (!ret) {</font>
<font color="#009900">++                        pk_warning ("failed to install files");</font>
<font color="#009900">++                        goto out;</font>
<font color="#009900">++                }</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++out:</font>
<font color="#009900">++        g_strfreev (package_ids);</font>
<font color="#009900">++        g_strfreev (files);</font>
<font color="#009900">++        g_ptr_array_free (array_files, TRUE);</font>
<font color="#009900">++        g_ptr_array_free (array_packages, TRUE);</font>
<font color="#009900">+         return ret;</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -570,16 +649,16 @@ pk_console_install_package (PkClient *client, const gchar *package, GError **err</font>
<font color="#009900">+  * pk_console_remove_only:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+-pk_console_remove_only (PkClient *client, const gchar *package_id, gboolean force, gboolean autoremove, GError **error)</font>
<font color="#009900">++pk_console_remove_only (PkClient *client, gchar **package_ids, gboolean force, GError **error)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         gboolean ret;</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pk_debug ("remove %s", package_id);</font>
<font color="#009900">++        pk_debug ("remove+ %s", package_ids[0]);</font>
<font color="#009900">+         ret = pk_client_reset (client, error);</font>
<font color="#009900">+         if (!ret) {</font>
<font color="#009900">+                 return ret;</font>
<font color="#009900">+         }</font>
<font color="#009900">+-        return pk_client_remove_package (client, package_id, force, autoremove, error);</font>
<font color="#009900">++        return pk_client_remove_packages (client, package_ids, force, FALSE, error);</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+@@ -625,64 +704,99 @@ pk_console_get_prompt (const gchar *question, gboolean defaultyes)</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+- * pk_console_remove_package:</font>
<font color="#009900">++ * pk_console_remove_packages:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+-pk_console_remove_package (PkClient *client, const gchar *package, GError **error)</font>
<font color="#009900">++pk_console_remove_packages (PkClient *client, gchar **packages, GError **error)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         gchar *package_id;</font>
<font color="#009900">+-        gboolean ret;</font>
<font color="#009900">+-        guint length;</font>
<font color="#009900">++        gboolean ret = TRUE;</font>
<font color="#009900">+         PkPackageItem *item;</font>
<font color="#009900">+         PkPackageId *ident;</font>
<font color="#009900">+-        guint i;</font>
<font color="#009900">++        guint i, j;</font>
<font color="#009900">++        guint size;</font>
<font color="#009900">++        guint length;</font>
<font color="#009900">+         gboolean remove;</font>
<font color="#009900">++        GPtrArray *array;</font>
<font color="#009900">++        gchar **package_ids = NULL;</font>
<font color="#009900">++        PkPackageList *list;</font>
<font color="#009900">++</font>
<font color="#009900">++        array = g_ptr_array_new ();</font>
<font color="#009900">++        list = pk_package_list_new ();</font>
<font color="#009900">++        length = g_strv_length (packages);</font>
<font color="#009900">++        for (i=2; i&lt;length; i++) {</font>
<font color="#009900">++                package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_INSTALLED, packages[i], error);</font>
<font color="#009900">++                if (package_id == NULL) {</font>
<font color="#009900">++                        g_print ("%s:%s\n", _("Could not find a package to remove"), packages[i]);</font>
<font color="#009900">++                        ret = FALSE;</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                }</font>
<font color="#009900">++                g_ptr_array_add (array, g_strdup (package_id));</font>
<font color="#009900">++                pk_debug ("resolved to %s", package_id);</font>
<font color="#009900">++                g_free (package_id);</font>
<font color="#009900">++        }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_INSTALLED, package, error);</font>
<font color="#009900">+-        if (package_id == NULL) {</font>
<font color="#009900">+-                g_print ("%s\n", _("Could not find a package with that name to remove"));</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">++        /* one of the resolves failed */</font>
<font color="#009900">++        if (!ret) {</font>
<font color="#009900">++                goto out;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">++        /* convert to strv */</font>
<font color="#009900">++        package_ids = pk_ptr_array_to_argv (array);</font>
<font color="#009900">++</font>
<font color="#009900">+         /* are we dumb and can't check for requires? */</font>
<font color="#009900">+         if (!pk_enums_contain (roles, PK_ROLE_ENUM_GET_REQUIRES)) {</font>
<font color="#009900">+                 /* no, just try to remove it without deps */</font>
<font color="#009900">+-                ret = pk_console_remove_only (client, package_id, FALSE, FALSE, error);</font>
<font color="#009900">+-                g_free (package_id);</font>
<font color="#009900">+-                return ret;</font>
<font color="#009900">++                ret = pk_console_remove_only (client, package_ids, FALSE, error);</font>
<font color="#009900">++                goto out;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        /* see if any packages require this one */</font>
<font color="#009900">+-        ret = pk_client_reset (client_task, error);</font>
<font color="#009900">+-        if (!ret) {</font>
<font color="#009900">+-                pk_warning ("failed to reset");</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">++        /* get the requires packages for each package_id */</font>
<font color="#009900">++        length = g_strv_length (package_ids);</font>
<font color="#009900">++        for (i=0; i&lt;length; i++) {</font>
<font color="#009900">++                ret = pk_client_reset (client_task, error);</font>
<font color="#009900">++                if (!ret) {</font>
<font color="#009900">++                        pk_warning ("failed to reset");</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                }</font>
<font color="#009900">++</font>
<font color="#009900">++                pk_debug ("Getting installed requires for %s", package_ids[i]);</font>
<font color="#009900">++                /* see if any packages require this one */</font>
<font color="#009900">++                ret = pk_client_get_requires (client_task, PK_FILTER_ENUM_INSTALLED, package_ids[i], TRUE, error);</font>
<font color="#009900">++                if (!ret) {</font>
<font color="#009900">++                        pk_warning ("failed to get requires");</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                }</font>
<font color="#009900">++</font>
<font color="#009900">++                /* see how many packages there are */</font>
<font color="#009900">++                size = pk_client_package_buffer_get_size (client_task);</font>
<font color="#009900">++                for (j=0; j&lt;size; j++) {</font>
<font color="#009900">++                        item = pk_client_package_buffer_get_item (client_task, j);</font>
<font color="#009900">++                        pk_package_list_add_item (list, item);</font>
<font color="#009900">++                }</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        pk_debug ("Getting installed requires for %s", package_id);</font>
<font color="#009900">+-        ret = pk_client_get_requires (client_task, PK_FILTER_ENUM_INSTALLED, package_id, TRUE, error);</font>
<font color="#009900">++        /* one of the get-requires failed */</font>
<font color="#009900">+         if (!ret) {</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">++                goto out;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+-        /* see how many packages there are */</font>
<font color="#009900">+-        length = pk_client_package_buffer_get_size (client_task);</font>
<font color="#009900">+-</font>
<font color="#009900">+         /* if there are no required packages, just do the remove */</font>
<font color="#009900">++        length = pk_package_list_get_size (list);</font>
<font color="#009900">+         if (length == 0) {</font>
<font color="#009900">+                 pk_debug ("no requires");</font>
<font color="#009900">+-                ret = pk_console_remove_only (client, package_id, FALSE, FALSE, error);</font>
<font color="#009900">+-                g_free (package_id);</font>
<font color="#009900">+-                return ret;</font>
<font color="#009900">++                ret = pk_console_remove_only (client, package_ids, FALSE, error);</font>
<font color="#009900">++                goto out;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">++</font>
<font color="#009900">+         /* present this to the user */</font>
<font color="#009900">+         if (awaiting_space) {</font>
<font color="#009900">+                 g_print ("\n");</font>
<font color="#009900">+         }</font>
<font color="#009900">+         g_print ("%s:\n", _("The following packages have to be removed"));</font>
<font color="#009900">+         for (i=0; i&lt;length; i++) {</font>
<font color="#009900">+-                item = pk_client_package_buffer_get_item (client_task, i);</font>
<font color="#009900">++                item = pk_package_list_get_item (list, i);</font>
<font color="#009900">+                 ident = pk_package_id_new_from_string (item-&gt;package_id);</font>
<font color="#009900">+                 g_print ("%i\t%s-%s\n", i, ident-&gt;name, ident-&gt;version);</font>
<font color="#009900">+                 pk_package_id_free (ident);</font>
<font color="#009900">+@@ -694,14 +808,17 @@ pk_console_remove_package (PkClient *client, const gchar *package, GError **erro</font>
<font color="#009900">+         /* we chickened out */</font>
<font color="#009900">+         if (remove == FALSE) {</font>
<font color="#009900">+                 g_print ("%s\n", _("Cancelled!"));</font>
<font color="#009900">+-                g_free (package_id);</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">++                ret = FALSE;</font>
<font color="#009900">++                goto out;</font>
<font color="#009900">+         }</font>
<font color="#009900">+ </font>
<font color="#009900">+         /* remove all the stuff */</font>
<font color="#009900">+-        ret = pk_console_remove_only (client, package_id, TRUE, FALSE, error);</font>
<font color="#009900">+-        g_free (package_id);</font>
<font color="#009900">++        ret = pk_console_remove_only (client, package_ids, TRUE, error);</font>
<font color="#009900">+ </font>
<font color="#009900">++out:</font>
<font color="#009900">++        g_object_unref (list);</font>
<font color="#009900">++        g_strfreev (package_ids);</font>
<font color="#009900">++        g_ptr_array_free (array, TRUE);</font>
<font color="#009900">+         return ret;</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -840,7 +957,7 @@ pk_console_error_code_cb (PkClient *client, PkErrorCodeEnum error_code, const gc</font>
<font color="#009900">+             error_code == PK_ERROR_ENUM_MISSING_GPG_SIGNATURE &amp;&amp; trusted) {</font>
<font color="#009900">+                 pk_debug ("need to try again with trusted FALSE");</font>
<font color="#009900">+                 trusted = FALSE;</font>
<font color="#009900">+-                ret = pk_client_install_file (client_install_files, trusted, filename, &amp;error);</font>
<font color="#009900">++                ret = pk_client_install_files (client_install_files, trusted, files_cache, &amp;error);</font>
<font color="#009900">+                 /* we succeeded, so wait for the requeue */</font>
<font color="#009900">+                 if (!ret) {</font>
<font color="#009900">+                         pk_warning ("failed to install file second time: %s", error-&gt;message);</font>
<font color="#009900">+@@ -1153,7 +1270,6 @@ main (int argc, char *argv[])</font>
<font color="#009900">+         const gchar *value = NULL;</font>
<font color="#009900">+         const gchar *details = NULL;</font>
<font color="#009900">+         const gchar *parameter = NULL;</font>
<font color="#009900">+-        PkRoleEnum roles;</font>
<font color="#009900">+         PkGroupEnum groups;</font>
<font color="#009900">+         gchar *text;</font>
<font color="#009900">+         ret = FALSE;</font>
<font color="#009900">+@@ -1324,15 +1440,7 @@ main (int argc, char *argv[])</font>
<font color="#009900">+                         g_print (_("You need to specify a package or file to install"));</font>
<font color="#009900">+                         goto out;</font>
<font color="#009900">+                 }</font>
<font color="#009900">+-                /* is it a local file? */</font>
<font color="#009900">+-                ret = g_file_test (value, G_FILE_TEST_EXISTS);</font>
<font color="#009900">+-                if (ret) {</font>
<font color="#009900">+-                        ret = pk_client_install_file (client, trusted, value, &amp;error);</font>
<font color="#009900">+-                        /* we need this for the untrusted try */</font>
<font color="#009900">+-                        filename = g_strdup (value);</font>
<font color="#009900">+-                } else {</font>
<font color="#009900">+-                        ret = pk_console_install_package (client, value, &amp;error);</font>
<font color="#009900">+-                }</font>
<font color="#009900">++                ret = pk_console_install_stuff (client, argv, &amp;error);</font>
<font color="#009900">+ </font>
<font color="#009900">+         } else if (strcmp (mode, "install-sig") == 0) {</font>
<font color="#009900">+                 if (value == NULL || details == NULL || parameter == NULL) {</font>
<font color="#009900">+@@ -1346,7 +1454,7 @@ main (int argc, char *argv[])</font>
<font color="#009900">+                         g_print (_("You need to specify a package to remove"));</font>
<font color="#009900">+                         goto out;</font>
<font color="#009900">+                 }</font>
<font color="#009900">+-                ret = pk_console_remove_package (client, value, &amp;error);</font>
<font color="#009900">++                ret = pk_console_remove_packages (client, argv, &amp;error);</font>
<font color="#009900">+ </font>
<font color="#009900">+         } else if (strcmp (mode, "accept-eula") == 0) {</font>
<font color="#009900">+                 if (value == NULL) {</font>
<font color="#009900">+@@ -1465,9 +1573,9 @@ main (int argc, char *argv[])</font>
<font color="#009900">+                 ret = pk_client_get_packages (client, filters, &amp;error);</font>
<font color="#009900">+ </font>
<font color="#009900">+         } else if (strcmp (mode, "get-actions") == 0) {</font>
<font color="#009900">+-                roles = pk_control_get_actions (control);</font>
<font color="#009900">+                 text = pk_role_enums_to_text (roles);</font>
<font color="#009900">+-                g_print ("roles=%s\n", text);</font>
<font color="#009900">++                g_strdelimit (text, ";", '\n');</font>
<font color="#009900">++                g_print ("%s\n", text);</font>
<font color="#009900">+                 g_free (text);</font>
<font color="#009900">+                 maybe_sync = FALSE;</font>
<font color="#009900">+                 /* these can never fail */</font>
<font color="#009900">+@@ -1476,7 +1584,8 @@ main (int argc, char *argv[])</font>
<font color="#009900">+         } else if (strcmp (mode, "get-filters") == 0) {</font>
<font color="#009900">+                 filters = pk_control_get_filters (control);</font>
<font color="#009900">+                 text = pk_filter_enums_to_text (filters);</font>
<font color="#009900">+-                g_print ("filters=%s\n", text);</font>
<font color="#009900">++                g_strdelimit (text, ";", '\n');</font>
<font color="#009900">++                g_print ("%s\n", text);</font>
<font color="#009900">+                 g_free (text);</font>
<font color="#009900">+                 maybe_sync = FALSE;</font>
<font color="#009900">+                 /* these can never fail */</font>
<font color="#009900">+@@ -1485,7 +1594,8 @@ main (int argc, char *argv[])</font>
<font color="#009900">+         } else if (strcmp (mode, "get-groups") == 0) {</font>
<font color="#009900">+                 groups = pk_control_get_groups (control);</font>
<font color="#009900">+                 text = pk_group_enums_to_text (groups);</font>
<font color="#009900">+-                g_print ("groups=%s\n", text);</font>
<font color="#009900">++                g_strdelimit (text, ";", '\n');</font>
<font color="#009900">++                g_print ("%s\n", text);</font>
<font color="#009900">+                 g_free (text);</font>
<font color="#009900">+                 maybe_sync = FALSE;</font>
<font color="#009900">+                 /* these can never fail */</font>
<font color="#009900">+@@ -1525,7 +1635,7 @@ out:</font>
<font color="#009900">+         g_free (options_help);</font>
<font color="#009900">+         g_free (filter);</font>
<font color="#009900">+         g_free (summary);</font>
<font color="#009900">+-        g_free (filename);</font>
<font color="#009900">++        g_strfreev (files_cache);</font>
<font color="#009900">+         g_object_unref (control);</font>
<font color="#009900">+         g_object_unref (client);</font>
<font color="#009900">+         g_object_unref (client_task);</font>
<font color="#009900">+diff --git a/configure.ac b/configure.ac</font>
<font color="#009900">+index 9d734e1..f614d2b 100644</font>
<font color="#009900">+--- a/configure.ac</font>
<font color="#009900">++++ b/configure.ac</font>
<font color="#009900">+@@ -535,7 +535,7 @@ if test x$enable_box = xyes; then</font>
<font color="#009900">+ fi</font>
<font color="#009900">+ </font>
<font color="#009900">+ if test x$enable_opkg = xyes; then</font>
<font color="#009900">+-        PKG_CHECK_MODULES(OPKG, libopkg = 0.1.3)</font>
<font color="#009900">++        PKG_CHECK_MODULES(OPKG, libopkg = 0.1.4)</font>
<font color="#009900">+         AC_SUBST(OPKG_CFLAGS)</font>
<font color="#009900">+         AC_SUBST(OPKG_LIBS)</font>
<font color="#009900">+ fi</font>
<font color="#009900">+diff --git a/contrib/yum-packagekit/refresh-packagekit.py b/contrib/yum-packagekit/refresh-packagekit.py</font>
<font color="#009900">+index 9c0bdf4..b440539 100644</font>
<font color="#009900">+--- a/contrib/yum-packagekit/refresh-packagekit.py</font>
<font color="#009900">++++ b/contrib/yum-packagekit/refresh-packagekit.py</font>
<font color="#009900">+@@ -35,7 +35,7 @@ def posttrans_hook(conduit):</font>
<font color="#009900">+                                           '/org/freedesktop/PackageKit')</font>
<font color="#009900">+         packagekit_iface = dbus.Interface(packagekit_proxy, 'org.freedesktop.PackageKit')</font>
<font color="#009900">+         packagekit_iface.StateHasChanged('posttrans')</font>
<font color="#009900">+-    except dbus.DBusException, e:</font>
<font color="#009900">++    except Exception, e:</font>
<font color="#009900">+         conduit.info(2, "Unable to send message to PackageKit")</font>
<font color="#009900">+         conduit.info(6, "%s" %(e,))</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/data/tests/Makefile.am b/data/tests/Makefile.am</font>
<font color="#009900">+index d15dd6c..6935e66 100644</font>
<font color="#009900">+--- a/data/tests/Makefile.am</font>
<font color="#009900">++++ b/data/tests/Makefile.am</font>
<font color="#009900">+@@ -5,6 +5,7 @@ NULL =</font>
<font color="#009900">+ </font>
<font color="#009900">+ TEST_FILES =                                                \</font>
<font color="#009900">+         pk-spawn-test.sh                                \</font>
<font color="#009900">++        pk-spawn-proxy.sh                                \</font>
<font color="#009900">+         pk-spawn-test-sigquit.sh                        \</font>
<font color="#009900">+         pk-spawn-test-profiling.sh                        \</font>
<font color="#009900">+         $(NULL)</font>
<font color="#009900">+diff --git a/data/tests/pk-spawn-proxy.sh b/data/tests/pk-spawn-proxy.sh</font>
<font color="#009900">+new file mode 100755</font>
<font color="#009900">+index 0000000..57774f1</font>
<font color="#009900">+--- /dev/null</font>
<font color="#009900">++++ b/data/tests/pk-spawn-proxy.sh</font>
<font color="#009900">+@@ -0,0 +1,20 @@</font>
<font color="#009900">++#!/bin/bash</font>
<font color="#009900">++# Copyright (C) 2008 Richard Hughes &lt;richard@hughsie.com&gt;</font>
<font color="#009900">++# Licensed under the GNU General Public License Version 2</font>
<font color="#009900">++# This program is free software; you can redistribute it and/or modify</font>
<font color="#009900">++# it under the terms of the GNU General Public License as published by</font>
<font color="#009900">++# the Free Software Foundation; either version 2 of the License, or</font>
<font color="#009900">++# (at your option) any later version.</font>
<font color="#009900">++</font>
<font color="#009900">++if [ -z "${http_proxy}" ]; then</font>
<font color="#009900">++        echo "no http proxy"</font>
<font color="#009900">++        exit 1</font>
<font color="#009900">++fi</font>
<font color="#009900">++</font>
<font color="#009900">++if [ -z "${ftp_proxy}" ]; then</font>
<font color="#009900">++        echo "no ftp proxy"</font>
<font color="#009900">++        exit 1</font>
<font color="#009900">++fi</font>
<font color="#009900">++</font>
<font color="#009900">++echo -e "percentage\t100"</font>
<font color="#009900">++</font>
<font color="#009900">+diff --git a/docs/html/index.html b/docs/html/index.html</font>
<font color="#009900">+index 7270eb7..d60f825 100644</font>
<font color="#009900">+--- a/docs/html/index.html</font>
<font color="#009900">++++ b/docs/html/index.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;PackageKit Main Page&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -20,10 +20,10 @@</font>
<font color="#009900">+ &lt;table align="center" cellpadding="5px" border="0"&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-intro.html"&gt;&lt;img src="img/large-accessories-text-editor.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-using.html"&gt;&lt;img src="img/large-preferences-system.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-download.html"&gt;&lt;img src="img/large-dialog-information.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-screenshots.html"&gt;&lt;img src="img/large-emblem-photos.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-intro.html"&gt;&lt;img src="img/large-accessories-text-editor.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-using.html"&gt;&lt;img src="img/large-preferences-system.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-download.html"&gt;&lt;img src="img/large-dialog-information.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-screenshots.html"&gt;&lt;img src="img/large-emblem-photos.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;&lt;p class="indextitle"&gt;&lt;a href="pk-intro.html" class="indextitle"&gt;What is&lt;br/&gt;PackageKit?&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+@@ -32,10 +32,10 @@</font>
<font color="#009900">+  &lt;td&gt;&lt;p class="indextitle"&gt;&lt;a href="pk-screenshots.html" class="indextitle"&gt;Screenshots&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-authors.html"&gt;&lt;img src="img/large-authors.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-bugs.html"&gt;&lt;img src="img/large-applications-development.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-help.html"&gt;&lt;img src="img/large-system-users.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td align="center"&gt;&lt;a href="pk-faq.html"&gt;&lt;img src="img/large-help-browser.png" width="128" alt="[img]"/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-authors.html"&gt;&lt;img src="img/large-authors.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-bugs.html"&gt;&lt;img src="img/large-applications-development.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-help.html"&gt;&lt;img src="img/large-system-users.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td align="center"&gt;&lt;a href="pk-faq.html"&gt;&lt;img src="img/large-help-browser.png" width="128" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;&lt;p class="indextitle"&gt;&lt;a href="pk-authors.html" class="indextitle"&gt;Who develops&lt;br/&gt;PackageKit?&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+diff --git a/docs/html/pk-authors.html b/docs/html/pk-authors.html</font>
<font color="#009900">+index 08289ad..607a7a4 100644</font>
<font color="#009900">+--- a/docs/html/pk-authors.html</font>
<font color="#009900">++++ b/docs/html/pk-authors.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;Who develops PackageKit?&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -22,7 +22,7 @@</font>
<font color="#009900">+ &lt;table cellpadding="10"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-hughsie.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-hughsie.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Richard Hughes&lt;/h2&gt;</font>
<font color="#009900">+@@ -48,7 +48,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-kenvandine.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-kenvandine.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Ken VanDine&lt;/h2&gt;</font>
<font color="#009900">+@@ -66,7 +66,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-btimothy.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-btimothy.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Boyd Timothy&lt;/h2&gt;</font>
<font color="#009900">+@@ -84,7 +84,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-rnorwood.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-rnorwood.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Robin Norwood&lt;/h2&gt;</font>
<font color="#009900">+@@ -101,7 +101,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-tomparker.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-tomparker.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Tom Parker&lt;/h2&gt;</font>
<font color="#009900">+@@ -118,7 +118,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-timlau.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-timlau.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Tim Lauridsen&lt;/h2&gt;</font>
<font color="#009900">+@@ -139,7 +139,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-lmacken.png" alt="[img]"/&gt;</font>
<font color="#009900">++  &lt;img src="img/author-lmacken.png" alt=""/&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Luke Macken&lt;/h2&gt;</font>
<font color="#009900">+@@ -154,7 +154,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-grzegorzdabrowski.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-grzegorzdabrowski.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Grzegorz DÄ…browski&lt;/h2&gt;</font>
<font color="#009900">+@@ -173,7 +173,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-caglar.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-caglar.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;S.ÇaÄŸlar Onur&lt;/h2&gt;</font>
<font color="#009900">+@@ -195,7 +195,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-elliot.png" alt="[img]"/&gt;</font>
<font color="#009900">++  &lt;img src="img/author-elliot.png" alt=""/&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Elliot Peele&lt;/h2&gt;</font>
<font color="#009900">+@@ -210,7 +210,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-jbowes.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-jbowes.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;James Bowes&lt;/h2&gt;</font>
<font color="#009900">+@@ -227,7 +227,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-unknown.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-unknown.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Thomas Wood&lt;/h2&gt;</font>
<font color="#009900">+@@ -247,7 +247,7 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+-  &lt;img src="img/author-unknown.png" alt="[img]"/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">++  &lt;img src="img/author-unknown.png" alt=""/&gt;&lt;!-- image should be 120px wide --&gt;</font>
<font color="#009900">+  &lt;/td&gt;</font>
<font color="#009900">+  &lt;td&gt;</font>
<font color="#009900">+   &lt;h2&gt;Scott Reeves&lt;/h2&gt;</font>
<font color="#009900">+diff --git a/docs/html/pk-bugs.html b/docs/html/pk-bugs.html</font>
<font color="#009900">+index 89f7c48..2ee12ea 100644</font>
<font color="#009900">+--- a/docs/html/pk-bugs.html</font>
<font color="#009900">++++ b/docs/html/pk-bugs.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;Reporting Bugs&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html</font>
<font color="#009900">+index 6f796b8..0cdc85c 100644</font>
<font color="#009900">+--- a/docs/html/pk-download.html</font>
<font color="#009900">++++ b/docs/html/pk-download.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;Where can I download it?&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/docs/html/pk-faq.html b/docs/html/pk-faq.html</font>
<font color="#009900">+index a25e2b7..efa8344 100644</font>
<font color="#009900">+--- a/docs/html/pk-faq.html</font>
<font color="#009900">++++ b/docs/html/pk-faq.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;Frequently Asked Questions&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -22,6 +22,7 @@</font>
<font color="#009900">+ &lt;h2&gt;Table Of Contents&lt;/h2&gt;</font>
<font color="#009900">+ &lt;ul&gt;</font>
<font color="#009900">+ &lt;li&gt;&lt;a href="#how-complete"&gt;How complete are the backends?&lt;/a&gt;&lt;/li&gt;</font>
<font color="#009900">++&lt;li&gt;&lt;a href="#run-as-root"&gt;When run as root, gpk-application and pkcon do not work!&lt;/a&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;li&gt;&lt;a href="#session-system"&gt;Why is there a session service and and a system service?&lt;/a&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;li&gt;&lt;a href="#session-methods"&gt;How do I use PackageKit in my application?&lt;/a&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;li&gt;&lt;a href="#rawhide-updates"&gt;Why don't I get update details with Fedora Rawhide?&lt;/a&gt;&lt;/li&gt;</font>
<font color="#009900">+@@ -565,6 +566,19 @@</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;hr&gt;</font>
<font color="#009900">++&lt;h3&gt;&lt;a name="run-as-root"&gt;When run as root, &lt;code&gt;gpk-application&lt;/code&gt; and &lt;code&gt;pkcon&lt;/code&gt; do not work!&lt;/a&gt;&lt;/h3&gt;</font>
<font color="#009900">++&lt;p&gt;</font>
<font color="#009900">++GTK+ tools should not be run as the root user, &lt;b&gt;PERIOD&lt;/b&gt;.</font>
<font color="#009900">++Any GTK+ program run as the root user is a massive security hole -- GTK+ just isn't designed with</font>
<font color="#009900">++this in mind.</font>
<font color="#009900">++There are &lt;b&gt;numerous&lt;/b&gt; attack vectors when running as root, and programs shouldn't do such</font>
<font color="#009900">++insane and insecure things.</font>
<font color="#009900">++&lt;/p&gt;</font>
<font color="#009900">++&lt;p&gt;</font>
<font color="#009900">++Please see &lt;a href="http://www.gtk.org/setuid.html"&gt;the GTK+ explanation&lt;/a&gt; for more rationale.</font>
<font color="#009900">++&lt;/p&gt;</font>
<font color="#009900">++</font>
<font color="#009900">++&lt;hr&gt;</font>
<font color="#009900">+ &lt;h3&gt;&lt;a name="session-system"&gt;Why is there a session service &lt;b&gt;and&lt;/b&gt; and a system service?&lt;/a&gt;&lt;/h3&gt;</font>
<font color="#009900">+ &lt;p&gt;</font>
<font color="#009900">+ PackageKit runs a process &lt;code&gt;packagekitd&lt;/code&gt; that is a daemon that runs per-system.</font>
<font color="#009900">+diff --git a/docs/html/pk-help.html b/docs/html/pk-help.html</font>
<font color="#009900">+index 5b44d50..5bc7827 100644</font>
<font color="#009900">+--- a/docs/html/pk-help.html</font>
<font color="#009900">++++ b/docs/html/pk-help.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;How can I help?&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -72,9 +72,9 @@ as for instructions!</font>
<font color="#009900">+ &lt;b&gt;0.2.2&lt;/b&gt; - To be released June 2008</font>
<font color="#009900">+ &lt;/p&gt;</font>
<font color="#009900">+ &lt;ul&gt;</font>
<font color="#009900">+-&lt;li&gt;Multiple package install and remove from pkcon &lt;i&gt;(0%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">++&lt;li&gt;Network proxy server support &lt;i&gt;(70%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">++&lt;li&gt;Multiple package install and remove from pkcon &lt;i&gt;(80%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;li&gt;NetworkManager integration so we can detect GPRS (and modem) connections. &lt;i&gt;(10%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">+-&lt;li&gt;Filter for source packages. &lt;i&gt;(0%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;/ul&gt;</font>
<font color="#009900">+ &lt;p&gt;</font>
<font color="#009900">+ &lt;b&gt;0.2.3&lt;/b&gt; - To be released July 2008</font>
<font color="#009900">+@@ -84,6 +84,12 @@ as for instructions!</font>
<font color="#009900">+ &lt;li&gt;Multiple package installs from gpk-application &lt;i&gt;(0%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;li&gt;Ignoring packages from the update viewer per-session &lt;i&gt;(10%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">+ &lt;/ul&gt;</font>
<font color="#009900">++&lt;p&gt;</font>
<font color="#009900">++&lt;b&gt;0.3.0&lt;/b&gt; - To be released December 2008</font>
<font color="#009900">++&lt;/p&gt;</font>
<font color="#009900">++&lt;ul&gt;</font>
<font color="#009900">++&lt;li&gt;More composite types &lt;code&gt;s&lt;/code&gt; to &lt;code&gt;as&lt;/code&gt; &lt;i&gt;(0%)&lt;/i&gt;&lt;/li&gt;</font>
<font color="#009900">++&lt;/ul&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;p&gt;Back to the &lt;a href="index.html"&gt;main page&lt;/a&gt;&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/docs/html/pk-intro.html b/docs/html/pk-intro.html</font>
<font color="#009900">+index c42be21..64f72fc 100644</font>
<font color="#009900">+--- a/docs/html/pk-intro.html</font>
<font color="#009900">++++ b/docs/html/pk-intro.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;What is PackageKit?&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/docs/html/pk-screenshots.html b/docs/html/pk-screenshots.html</font>
<font color="#009900">+index 78bd01f..5c7d4fa 100644</font>
<font color="#009900">+--- a/docs/html/pk-screenshots.html</font>
<font color="#009900">++++ b/docs/html/pk-screenshots.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;Screenshots&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;center&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/center&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -26,77 +26,77 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;h1&gt;&lt;a name="gnome"&gt;GNOME Screenshots&lt;/a&gt;&lt;/h1&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-application-search.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-application-search.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Add/Remove Software search&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-application-groups.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-application-groups.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Add/Remove Software groups&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-log.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-log.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Transaction viewer&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-updates-overview.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-updates-overview.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Update viewer overview&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-updates.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-updates.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Update viewer&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-prefs.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-prefs.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Auto update preferences&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-progress.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-progress.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Progress dialog&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-added-deps.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-added-deps.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Added check warning&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-eula.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-eula.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;EULA dialog&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-remove-confirm.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-remove-confirm.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Remove check warning&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-repo-auth.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-repo-auth.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Repository authentication&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-repo.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-repo.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Repository viewer&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-backend-status.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-backend-status.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;PackageKit backend status&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-updates-warning.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-updates-warning.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Libnotify updates warning&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-waiting.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-waiting.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Tasks waiting&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-battery.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-battery.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Intergration with gnome-power-manager&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-inhibit.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-inhibit.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Inhibit with gnome-power-manager&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-require-restart.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-require-restart.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;We sometimes need to do a restart&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/gpk-auto-update.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/gpk-auto-update.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Auto update install dialog&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;h1&gt;&lt;a name="kde"&gt;KDE Screenshots&lt;/a&gt;&lt;/h1&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/kpk-search.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/kpk-search.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;KPackageKit Searching&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/kpk-information.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/kpk-information.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;KPackageKit Package Information&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/pk-opensuse-updater.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/pk-opensuse-updater.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;OpenSuse Updater&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;h1&gt;&lt;a name="moko"&gt;OpenMoko Screenshots&lt;/a&gt;&lt;/h1&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+-&lt;center&gt;&lt;img src="img/assassin.png" alt="[img]"/&gt;&lt;/center&gt;</font>
<font color="#009900">++&lt;center&gt;&lt;img src="img/assassin.png" alt=""/&gt;&lt;/center&gt;</font>
<font color="#009900">+ &lt;p class="caption"&gt;Assassin&lt;/p&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;p&gt;Back to the &lt;a href="index.html"&gt;main page&lt;/a&gt;&lt;/p&gt;</font>
<font color="#009900">+diff --git a/docs/html/pk-using.html b/docs/html/pk-using.html</font>
<font color="#009900">+index cc455c7..b2b028e 100644</font>
<font color="#009900">+--- a/docs/html/pk-using.html</font>
<font color="#009900">++++ b/docs/html/pk-using.html</font>
<font color="#009900">+@@ -9,9 +9,9 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ &lt;table align="center" class="title"&gt;</font>
<font color="#009900">+ &lt;tr&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+  &lt;td width="95%" valign="middle"&gt;&lt;p class="title"&gt;How do I use PackageKit?&lt;/p&gt;&lt;/td&gt;</font>
<font color="#009900">+- &lt;td&gt;&lt;img src="img/packagekit.png" alt="[img]"/&gt;&lt;/td&gt;</font>
<font color="#009900">++ &lt;td&gt;&lt;img src="img/packagekit.png" alt=""/&gt;&lt;/td&gt;</font>
<font color="#009900">+ &lt;/tr&gt;</font>
<font color="#009900">+ &lt;/table&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/docs/spec/pk-concepts.xml b/docs/spec/pk-concepts.xml</font>
<font color="#009900">+index 312c5a4..0b75b10 100644</font>
<font color="#009900">+--- a/docs/spec/pk-concepts.xml</font>
<font color="#009900">++++ b/docs/spec/pk-concepts.xml</font>
<font color="#009900">+@@ -127,6 +127,13 @@</font>
<font color="#009900">+               This allows the used to choose non-native packages if a multi-lib policy is allowed.</font>
<font color="#009900">+             &lt;/entry&gt;</font>
<font color="#009900">+           &lt;/row&gt;</font>
<font color="#009900">++          &lt;row&gt;</font>
<font color="#009900">++            &lt;entry&gt;&lt;literal&gt;source&lt;/literal&gt; or &lt;literal&gt;~source&lt;/literal&gt;&lt;/entry&gt;</font>
<font color="#009900">++            &lt;entry&gt;</font>
<font color="#009900">++              The source filter will only return source packages.</font>
<font color="#009900">++              These are typically useful when rebuilding other packages.</font>
<font color="#009900">++            &lt;/entry&gt;</font>
<font color="#009900">++          &lt;/row&gt;</font>
<font color="#009900">+         &lt;/tbody&gt;</font>
<font color="#009900">+       &lt;/tgroup&gt;</font>
<font color="#009900">+     &lt;/informaltable&gt;</font>
<font color="#009900">+diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in</font>
<font color="#009900">+index a6af99b..8f9bd57 100644</font>
<font color="#009900">+--- a/etc/PackageKit.conf.in</font>
<font color="#009900">++++ b/etc/PackageKit.conf.in</font>
<font color="#009900">+@@ -31,3 +31,13 @@ ShutdownTimeout=300</font>
<font color="#009900">+ # default=@defaultbackend@</font>
<font color="#009900">+ DefaultBackend=@defaultbackend@</font>
<font color="#009900">+ </font>
<font color="#009900">++# Proxy settings, uncomment as required</font>
<font color="#009900">++#</font>
<font color="#009900">++# NOTE: PackageKit does not use these settings, they are passed to backends.</font>
<font color="#009900">++# Backends may ignore these values, or they may be updated from the session.</font>
<font color="#009900">++#</font>
<font color="#009900">++# They are in the format username:password@server:port</font>
<font color="#009900">++#</font>
<font color="#009900">++# ProxyHTTP=username:password@server.lan:8080</font>
<font color="#009900">++# ProxyFTP=username:password@server.lan:21</font>
<font color="#009900">++</font>
<font color="#009900">+diff --git a/libpackagekit/Makefile.am b/libpackagekit/Makefile.am</font>
<font color="#009900">+index 6b8c6b8..aeafe44 100644</font>
<font color="#009900">+--- a/libpackagekit/Makefile.am</font>
<font color="#009900">++++ b/libpackagekit/Makefile.am</font>
<font color="#009900">+@@ -37,6 +37,7 @@ libpackagekit_include_HEADERS =                                        \</font>
<font color="#009900">+         pk-connection.h                                                \</font>
<font color="#009900">+         pk-package-id.h                                                \</font>
<font color="#009900">+         pk-package-ids.h                                        \</font>
<font color="#009900">++        pk-package-item.h                                        \</font>
<font color="#009900">+         pk-package-list.h                                        \</font>
<font color="#009900">+         pk-enum.h                                                \</font>
<font color="#009900">+         pk-common.h                                                \</font>
<font color="#009900">+@@ -59,6 +60,8 @@ libpackagekit_la_SOURCES =                                        \</font>
<font color="#009900">+         pk-package-id.h                                                \</font>
<font color="#009900">+         pk-package-ids.c                                        \</font>
<font color="#009900">+         pk-package-ids.h                                        \</font>
<font color="#009900">++        pk-package-item.c                                        \</font>
<font color="#009900">++        pk-package-item.h                                        \</font>
<font color="#009900">+         pk-package-list.c                                        \</font>
<font color="#009900">+         pk-package-list.h                                        \</font>
<font color="#009900">+         pk-enum.h                                                \</font>
<font color="#009900">+diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c</font>
<font color="#009900">+index b5b6ac3..5743dcb 100644</font>
<font color="#009900">+--- a/libpackagekit/pk-enum.c</font>
<font color="#009900">++++ b/libpackagekit/pk-enum.c</font>
<font color="#009900">+@@ -193,6 +193,8 @@ static PkEnumMatch enum_filter[] = {</font>
<font color="#009900">+         {PK_FILTER_ENUM_NOT_NEWEST,                "~newest"},</font>
<font color="#009900">+         {PK_FILTER_ENUM_ARCH,                        "arch"},</font>
<font color="#009900">+         {PK_FILTER_ENUM_NOT_ARCH,                "~arch"},</font>
<font color="#009900">++        {PK_FILTER_ENUM_SOURCE,                        "source"},</font>
<font color="#009900">++        {PK_FILTER_ENUM_NOT_SOURCE,                "~source"},</font>
<font color="#009900">+         {0, NULL}</font>
<font color="#009900">+ };</font>
<font color="#009900">+ </font>
<font color="#009900">+diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h</font>
<font color="#009900">+index 33e8a91..e616b64 100644</font>
<font color="#009900">+--- a/libpackagekit/pk-enum.h</font>
<font color="#009900">++++ b/libpackagekit/pk-enum.h</font>
<font color="#009900">+@@ -182,7 +182,9 @@ typedef enum {</font>
<font color="#009900">+         PK_FILTER_ENUM_NOT_NEWEST                = 1 &lt;&lt; 15,</font>
<font color="#009900">+         PK_FILTER_ENUM_ARCH                        = 1 &lt;&lt; 16,</font>
<font color="#009900">+         PK_FILTER_ENUM_NOT_ARCH                        = 1 &lt;&lt; 17,</font>
<font color="#009900">+-        PK_FILTER_ENUM_UNKNOWN                        = 1 &lt;&lt; 18</font>
<font color="#009900">++        PK_FILTER_ENUM_SOURCE                        = 1 &lt;&lt; 18,</font>
<font color="#009900">++        PK_FILTER_ENUM_NOT_SOURCE                = 1 &lt;&lt; 19,</font>
<font color="#009900">++        PK_FILTER_ENUM_UNKNOWN                        = 1 &lt;&lt; 20</font>
<font color="#009900">+ } PkFilterEnum;</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+diff --git a/libpackagekit/pk-package-item.c b/libpackagekit/pk-package-item.c</font>
<font color="#009900">+new file mode 100644</font>
<font color="#009900">+index 0000000..87905dc</font>
<font color="#009900">+--- /dev/null</font>
<font color="#009900">++++ b/libpackagekit/pk-package-item.c</font>
<font color="#009900">+@@ -0,0 +1,190 @@</font>
<font color="#009900">++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Copyright (C) 2007-2008 Richard Hughes &lt;richard@hughsie.com&gt;</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Licensed under the GNU General Public License Version 2</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * This program is free software; you can redistribute it and/or modify</font>
<font color="#009900">++ * it under the terms of the GNU General Public License as published by</font>
<font color="#009900">++ * the Free Software Foundation; either version 2 of the License, or</font>
<font color="#009900">++ * (at your option) any later version.</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * This program is distributed in the hope that it will be useful,</font>
<font color="#009900">++ * but WITHOUT ANY WARRANTY; without even the implied warranty of</font>
<font color="#009900">++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</font>
<font color="#009900">++ * GNU General Public License for more details.</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * You should have received a copy of the GNU General Public License</font>
<font color="#009900">++ * along with this program; if not, write to the Free Software</font>
<font color="#009900">++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</font>
<font color="#009900">++ */</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * SECTION:pk-package-item</font>
<font color="#009900">++ * @short_description: A cached Package structure</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * These provide a way to query and store a single package.</font>
<font color="#009900">++ */</font>
<font color="#009900">++</font>
<font color="#009900">++#include "config.h"</font>
<font color="#009900">++</font>
<font color="#009900">++#include &lt;stdlib.h&gt;</font>
<font color="#009900">++#include &lt;stdio.h&gt;</font>
<font color="#009900">++#include &lt;time.h&gt;</font>
<font color="#009900">++#include &lt;errno.h&gt;</font>
<font color="#009900">++</font>
<font color="#009900">++#include &lt;string.h&gt;</font>
<font color="#009900">++#include &lt;sys/time.h&gt;</font>
<font color="#009900">++#include &lt;sys/types.h&gt;</font>
<font color="#009900">++#ifdef HAVE_UNISTD_H</font>
<font color="#009900">++#include &lt;unistd.h&gt;</font>
<font color="#009900">++#endif /* HAVE_UNISTD_H */</font>
<font color="#009900">++</font>
<font color="#009900">++#include &lt;glib/gi18n.h&gt;</font>
<font color="#009900">++</font>
<font color="#009900">++#include "pk-debug.h"</font>
<font color="#009900">++#include "pk-common.h"</font>
<font color="#009900">++#include "pk-package-item.h"</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * pk_package_item_new:</font>
<font color="#009900">++ **/</font>
<font color="#009900">++PkPackageItem *</font>
<font color="#009900">++pk_package_item_new (PkInfoEnum info, const gchar *package_id, const gchar *summary)</font>
<font color="#009900">++{</font>
<font color="#009900">++        PkPackageItem *item;</font>
<font color="#009900">++</font>
<font color="#009900">++        g_return_val_if_fail (package_id != NULL, FALSE);</font>
<font color="#009900">++</font>
<font color="#009900">++        pk_debug ("adding to cache item package %s, %s, %s", pk_info_enum_to_text (info), package_id, summary);</font>
<font color="#009900">++        item = g_new0 (PkPackageItem, 1);</font>
<font color="#009900">++        item-&gt;info = info;</font>
<font color="#009900">++        item-&gt;package_id = g_strdup (package_id);</font>
<font color="#009900">++        item-&gt;summary = g_strdup (summary);</font>
<font color="#009900">++        return item;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * pk_package_item_free:</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gboolean</font>
<font color="#009900">++pk_package_item_free (PkPackageItem *item)</font>
<font color="#009900">++{</font>
<font color="#009900">++        if (item == NULL) {</font>
<font color="#009900">++                return FALSE;</font>
<font color="#009900">++        }</font>
<font color="#009900">++        g_free (item-&gt;package_id);</font>
<font color="#009900">++        g_free (item-&gt;summary);</font>
<font color="#009900">++        g_free (item);</font>
<font color="#009900">++        return TRUE;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * pk_package_item_equal:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Only compares the package_id's and the info enum</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gboolean</font>
<font color="#009900">++pk_package_item_equal (PkPackageItem *item1, PkPackageItem *item2)</font>
<font color="#009900">++{</font>
<font color="#009900">++        if (item1 == NULL || item2 == NULL) {</font>
<font color="#009900">++                return FALSE;</font>
<font color="#009900">++        }</font>
<font color="#009900">++        return (item1-&gt;info == item2-&gt;info &amp;&amp;</font>
<font color="#009900">++                pk_strequal (item1-&gt;package_id, item2-&gt;package_id));</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * pk_package_item_copy:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Copy a PkPackageItem</font>
<font color="#009900">++ **/</font>
<font color="#009900">++PkPackageItem *</font>
<font color="#009900">++pk_package_item_copy (PkPackageItem *item)</font>
<font color="#009900">++{</font>
<font color="#009900">++        g_return_val_if_fail (item != NULL, NULL);</font>
<font color="#009900">++        return pk_package_item_new (item-&gt;info, item-&gt;package_id, item-&gt;summary);</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/***************************************************************************</font>
<font color="#009900">++ ***                          MAKE CHECK TESTS                           ***</font>
<font color="#009900">++ ***************************************************************************/</font>
<font color="#009900">++#ifdef PK_BUILD_TESTS</font>
<font color="#009900">++#include &lt;libselftest.h&gt;</font>
<font color="#009900">++</font>
<font color="#009900">++void</font>
<font color="#009900">++libst_package_item (LibSelfTest *test)</font>
<font color="#009900">++{</font>
<font color="#009900">++        PkPackageItem *item1;</font>
<font color="#009900">++        PkPackageItem *item2;</font>
<font color="#009900">++        PkPackageItem *item3;</font>
<font color="#009900">++        gboolean ret;</font>
<font color="#009900">++</font>
<font color="#009900">++        if (libst_start (test, "PkPackageItem", CLASS_AUTO) == FALSE) {</font>
<font color="#009900">++                return;</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">++        libst_title (test, "add entry");</font>
<font color="#009900">++        item1 = pk_package_item_new (PK_INFO_ENUM_INSTALLED, "gnome;1.23;i386;data", "GNOME!");</font>
<font color="#009900">++        if (item1 != NULL) {</font>
<font color="#009900">++                libst_success (test, NULL);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, NULL);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">++        libst_title (test, "add entry");</font>
<font color="#009900">++        item2 = pk_package_item_new (PK_INFO_ENUM_INSTALLED, "gnome;1.23;i386;data", "GNOME foo!");</font>
<font color="#009900">++        if (item2 != NULL) {</font>
<font color="#009900">++                libst_success (test, NULL);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, NULL);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">++        libst_title (test, "copy entry");</font>
<font color="#009900">++        item3 = pk_package_item_copy (item2);</font>
<font color="#009900">++        if (item3 != NULL) {</font>
<font color="#009900">++                libst_success (test, NULL);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, NULL);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">++        libst_title (test, "check equal");</font>
<font color="#009900">++        ret = pk_package_item_equal (item1, item3);</font>
<font color="#009900">++        if (ret) {</font>
<font color="#009900">++                libst_success (test, NULL);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, NULL);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        pk_package_item_free (item2);</font>
<font color="#009900">++        pk_package_item_free (item3);</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">++        libst_title (test, "add entry");</font>
<font color="#009900">++        item2 = pk_package_item_new (PK_INFO_ENUM_INSTALLED, "gnome-do;1.23;i386;data", "GNOME doo!");</font>
<font color="#009900">++        if (item2 != NULL) {</font>
<font color="#009900">++                libst_success (test, NULL);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, NULL);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">++        libst_title (test, "check !equal");</font>
<font color="#009900">++        ret = pk_package_item_equal (item1, item2);</font>
<font color="#009900">++        if (!ret) {</font>
<font color="#009900">++                libst_success (test, NULL);</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, NULL);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        pk_package_item_free (item1);</font>
<font color="#009900">++        pk_package_item_free (item2);</font>
<font color="#009900">++</font>
<font color="#009900">++        libst_end (test);</font>
<font color="#009900">++}</font>
<font color="#009900">++#endif</font>
<font color="#009900">++</font>
<font color="#009900">+diff --git a/libpackagekit/pk-package-item.h b/libpackagekit/pk-package-item.h</font>
<font color="#009900">+new file mode 100644</font>
<font color="#009900">+index 0000000..c41a6ea</font>
<font color="#009900">+--- /dev/null</font>
<font color="#009900">++++ b/libpackagekit/pk-package-item.h</font>
<font color="#009900">+@@ -0,0 +1,48 @@</font>
<font color="#009900">++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Copyright (C) 2008 Richard Hughes &lt;richard@hughsie.com&gt;</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Licensed under the GNU General Public License Version 2</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * This program is free software; you can redistribute it and/or modify</font>
<font color="#009900">++ * it under the terms of the GNU General Public License as published by</font>
<font color="#009900">++ * the Free Software Foundation; either version 2 of the License, or</font>
<font color="#009900">++ * (at your option) any later version.</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * This program is distributed in the hope that it will be useful,</font>
<font color="#009900">++ * but WITHOUT ANY WARRANTY; without even the implied warranty of</font>
<font color="#009900">++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</font>
<font color="#009900">++ * GNU General Public License for more details.</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * You should have received a copy of the GNU General Public License</font>
<font color="#009900">++ * along with this program; if not, write to the Free Software</font>
<font color="#009900">++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</font>
<font color="#009900">++ */</font>
<font color="#009900">++</font>
<font color="#009900">++#ifndef __PK_PACKAGE_ITEM_H</font>
<font color="#009900">++#define __PK_PACKAGE_ITEM_H</font>
<font color="#009900">++</font>
<font color="#009900">++#include &lt;glib-object.h&gt;</font>
<font color="#009900">++#include &lt;pk-enum.h&gt;</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * PkPackageItem:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * A cached store for the complete Package object</font>
<font color="#009900">++ */</font>
<font color="#009900">++typedef struct {</font>
<font color="#009900">++        PkInfoEnum                 info;</font>
<font color="#009900">++        gchar                        *package_id;</font>
<font color="#009900">++        gchar                        *summary;</font>
<font color="#009900">++} PkPackageItem;</font>
<font color="#009900">++</font>
<font color="#009900">++PkPackageItem        *pk_package_item_new                        (PkInfoEnum                 info,</font>
<font color="#009900">++                                                         const gchar                *package_id,</font>
<font color="#009900">++                                                         const gchar                *summary);</font>
<font color="#009900">++gboolean         pk_package_item_free                        (PkPackageItem                *item);</font>
<font color="#009900">++PkPackageItem        *pk_package_item_copy                        (PkPackageItem                *item);</font>
<font color="#009900">++gboolean         pk_package_item_equal                        (PkPackageItem                *item1,</font>
<font color="#009900">++                                                         PkPackageItem                *item2);</font>
<font color="#009900">++</font>
<font color="#009900">++#endif /* __PK_PACKAGE_ITEM_H */</font>
<font color="#009900">++</font>
<font color="#009900">+diff --git a/libpackagekit/pk-package-list.c b/libpackagekit/pk-package-list.c</font>
<font color="#009900">+index b0a1a71..5d95e1b 100644</font>
<font color="#009900">+--- a/libpackagekit/pk-package-list.c</font>
<font color="#009900">++++ b/libpackagekit/pk-package-list.c</font>
<font color="#009900">+@@ -45,6 +45,7 @@</font>
<font color="#009900">+ #include "pk-debug.h"</font>
<font color="#009900">+ #include "pk-common.h"</font>
<font color="#009900">+ #include "pk-package-id.h"</font>
<font color="#009900">++#include "pk-package-item.h"</font>
<font color="#009900">+ #include "pk-package-list.h"</font>
<font color="#009900">+ </font>
<font color="#009900">+ static void     pk_package_list_class_init        (PkPackageListClass *klass);</font>
<font color="#009900">+@@ -77,16 +78,42 @@ pk_package_list_add (PkPackageList *plist, PkInfoEnum info, const gchar *package</font>
<font color="#009900">+         g_return_val_if_fail (package_id != NULL, FALSE);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_debug ("adding to cache array package %s, %s, %s", pk_info_enum_to_text (info), package_id, summary);</font>
<font color="#009900">+-        item = g_new0 (PkPackageItem, 1);</font>
<font color="#009900">+-        item-&gt;info = info;</font>
<font color="#009900">+-        item-&gt;package_id = g_strdup (package_id);</font>
<font color="#009900">+-        item-&gt;summary = g_strdup (summary);</font>
<font color="#009900">++        item = pk_package_item_new (info, package_id, summary);</font>
<font color="#009900">+         g_ptr_array_add (plist-&gt;priv-&gt;array, item);</font>
<font color="#009900">+ </font>
<font color="#009900">+         return TRUE;</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">++ * pk_package_list_add_item:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Makes a deep copy, and adds to the array</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gboolean</font>
<font color="#009900">++pk_package_list_add_item (PkPackageList *plist, PkPackageItem *item)</font>
<font color="#009900">++{</font>
<font color="#009900">++        gboolean ret;</font>
<font color="#009900">++        PkPackageItem *item_new;</font>
<font color="#009900">++</font>
<font color="#009900">++        g_return_val_if_fail (PK_IS_PACKAGE_LIST (plist), FALSE);</font>
<font color="#009900">++        g_return_val_if_fail (item != NULL, FALSE);</font>
<font color="#009900">++</font>
<font color="#009900">++        ret = pk_package_list_contains_item (plist, item);</font>
<font color="#009900">++        if (ret) {</font>
<font color="#009900">++                pk_debug ("already added item");</font>
<font color="#009900">++                return FALSE;</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        pk_debug ("adding to cache array package %s, %s, %s",</font>
<font color="#009900">++                  pk_info_enum_to_text (item-&gt;info), item-&gt;package_id, item-&gt;summary);</font>
<font color="#009900">++</font>
<font color="#009900">++        item_new = pk_package_item_copy (item);</font>
<font color="#009900">++        g_ptr_array_add (plist-&gt;priv-&gt;array, item_new);</font>
<font color="#009900">++</font>
<font color="#009900">++        return TRUE;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">+  * pk_package_list_get_string:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ gchar *</font>
<font color="#009900">+@@ -152,9 +179,7 @@ pk_package_list_clear (PkPackageList *plist)</font>
<font color="#009900">+ </font>
<font color="#009900">+         while (plist-&gt;priv-&gt;array-&gt;len &gt; 0) {</font>
<font color="#009900">+                 item = g_ptr_array_index (plist-&gt;priv-&gt;array, 0);</font>
<font color="#009900">+-                g_free (item-&gt;package_id);</font>
<font color="#009900">+-                g_free (item-&gt;summary);</font>
<font color="#009900">+-                g_free (item);</font>
<font color="#009900">++                pk_package_item_free (item);</font>
<font color="#009900">+                 g_ptr_array_remove_index_fast (plist-&gt;priv-&gt;array, 0);</font>
<font color="#009900">+         }</font>
<font color="#009900">+         return TRUE;</font>
<font color="#009900">+@@ -186,6 +211,31 @@ pk_package_list_contains (PkPackageList *plist, const gchar *package_id)</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">++ * pk_package_list_contains_item:</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gboolean</font>
<font color="#009900">++pk_package_list_contains_item (PkPackageList *plist, PkPackageItem *item)</font>
<font color="#009900">++{</font>
<font color="#009900">++        PkPackageItem *item_temp;</font>
<font color="#009900">++        guint i;</font>
<font color="#009900">++        guint length;</font>
<font color="#009900">++        gboolean ret = FALSE;</font>
<font color="#009900">++</font>
<font color="#009900">++        g_return_val_if_fail (PK_IS_PACKAGE_LIST (plist), FALSE);</font>
<font color="#009900">++        g_return_val_if_fail (item != NULL, FALSE);</font>
<font color="#009900">++</font>
<font color="#009900">++        length = plist-&gt;priv-&gt;array-&gt;len;</font>
<font color="#009900">++        for (i=0; i&lt;length; i++) {</font>
<font color="#009900">++                item_temp = g_ptr_array_index (plist-&gt;priv-&gt;array, i);</font>
<font color="#009900">++                ret = pk_package_item_equal (item_temp, item);</font>
<font color="#009900">++                if (ret) {</font>
<font color="#009900">++                        break;</font>
<font color="#009900">++                }</font>
<font color="#009900">++        }</font>
<font color="#009900">++        return ret;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">+  * pk_package_list_class_init:</font>
<font color="#009900">+  * @klass: The PkPackageListClass</font>
<font color="#009900">+  **/</font>
<font color="#009900">+diff --git a/libpackagekit/pk-package-list.h b/libpackagekit/pk-package-list.h</font>
<font color="#009900">+index 9178f77..9734af4 100644</font>
<font color="#009900">+--- a/libpackagekit/pk-package-list.h</font>
<font color="#009900">++++ b/libpackagekit/pk-package-list.h</font>
<font color="#009900">+@@ -25,6 +25,8 @@</font>
<font color="#009900">+ #include &lt;glib-object.h&gt;</font>
<font color="#009900">+ #include &lt;pk-enum.h&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">++#include "pk-package-item.h"</font>
<font color="#009900">++</font>
<font color="#009900">+ G_BEGIN_DECLS</font>
<font color="#009900">+ </font>
<font color="#009900">+ #define PK_TYPE_PACKAGE_LIST                (pk_package_list_get_type ())</font>
<font color="#009900">+@@ -49,26 +51,18 @@ struct _PkPackageListClass</font>
<font color="#009900">+         GObjectClass        parent_class;</font>
<font color="#009900">+ };</font>
<font color="#009900">+ </font>
<font color="#009900">+-/**</font>
<font color="#009900">+- * PkPackageItem:</font>
<font color="#009900">+- *</font>
<font color="#009900">+- * A cached store for the complete Package object</font>
<font color="#009900">+- */</font>
<font color="#009900">+-typedef struct</font>
<font color="#009900">+-{</font>
<font color="#009900">+-        PkInfoEnum                 info;</font>
<font color="#009900">+-        gchar                        *package_id;</font>
<font color="#009900">+-        gchar                        *summary;</font>
<font color="#009900">+-} PkPackageItem;</font>
<font color="#009900">+-</font>
<font color="#009900">+ GType                 pk_package_list_get_type                (void) G_GNUC_CONST;</font>
<font color="#009900">+ PkPackageList        *pk_package_list_new                        (void);</font>
<font color="#009900">+ gboolean         pk_package_list_add                        (PkPackageList                *plist,</font>
<font color="#009900">+                                                          PkInfoEnum                 info,</font>
<font color="#009900">+                                                          const gchar                *package_id,</font>
<font color="#009900">+                                                          const gchar                *summary);</font>
<font color="#009900">++gboolean         pk_package_list_add_item                (PkPackageList                *plist,</font>
<font color="#009900">++                                                         PkPackageItem                *item);</font>
<font color="#009900">+ gboolean         pk_package_list_contains                (PkPackageList                *plist,</font>
<font color="#009900">+                                                          const gchar                *package_id);</font>
<font color="#009900">++gboolean         pk_package_list_contains_item                (PkPackageList                *plist,</font>
<font color="#009900">++                                                         PkPackageItem                *item);</font>
<font color="#009900">+ gchar                *pk_package_list_get_string                (PkPackageList                *plist)</font>
<font color="#009900">+                                                          G_GNUC_WARN_UNUSED_RESULT;</font>
<font color="#009900">+ guint                 pk_package_list_get_size                (PkPackageList                *plist);</font>
<font color="#009900">+diff --git a/libpackagekit/pk-self-test.c b/libpackagekit/pk-self-test.c</font>
<font color="#009900">+index 62e225b..bf151fb 100644</font>
<font color="#009900">+--- a/libpackagekit/pk-self-test.c</font>
<font color="#009900">++++ b/libpackagekit/pk-self-test.c</font>
<font color="#009900">+@@ -29,6 +29,7 @@</font>
<font color="#009900">+ /* prototypes */</font>
<font color="#009900">+ void libst_package_id (LibSelfTest *test);</font>
<font color="#009900">+ void libst_package_ids (LibSelfTest *test);</font>
<font color="#009900">++void libst_package_item (LibSelfTest *test);</font>
<font color="#009900">+ void libst_package_list (LibSelfTest *test);</font>
<font color="#009900">+ void libst_enum (LibSelfTest *test);</font>
<font color="#009900">+ void libst_common (LibSelfTest *test);</font>
<font color="#009900">+@@ -51,6 +52,7 @@ main (int argc, char **argv)</font>
<font color="#009900">+         libst_common (&amp;test);</font>
<font color="#009900">+         libst_package_id (&amp;test);</font>
<font color="#009900">+         libst_package_ids (&amp;test);</font>
<font color="#009900">++        libst_package_item (&amp;test);</font>
<font color="#009900">+         libst_package_list (&amp;test);</font>
<font color="#009900">+         libst_enum (&amp;test);</font>
<font color="#009900">+         libst_extra (&amp;test);</font>
<font color="#009900">+diff --git a/python/packagekit/daemonBackend.py b/python/packagekit/daemonBackend.py</font>
<font color="#009900">+index 3711f01..5253b39 100644</font>
<font color="#009900">+--- a/python/packagekit/daemonBackend.py</font>
<font color="#009900">++++ b/python/packagekit/daemonBackend.py</font>
<font color="#009900">+@@ -789,6 +789,21 @@ class PackageKitBaseBackend(dbus.service.Object):</font>
<font color="#009900">+         self.Finished(EXIT_FAILED)</font>
<font color="#009900">+ </font>
<font color="#009900">+     @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE,</font>
<font color="#009900">++                         in_signature='ss', out_signature='')</font>
<font color="#009900">++    def SetProxy(self, proxy_http, proxy_ftp):</font>
<font color="#009900">++        '''</font>
<font color="#009900">++        Set the proxy</font>
<font color="#009900">++        '''</font>
<font color="#009900">++        pklog.info("SetProxy(%s, %s)" % (proxy_http, proxy_ftp))</font>
<font color="#009900">++        self.doSetProxy(proxy_http, proxy_ftp)</font>
<font color="#009900">++</font>
<font color="#009900">++    def doSetProxy(self, proxy_http, proxy_ftp):</font>
<font color="#009900">++        '''</font>
<font color="#009900">++        Should be replaced in the corresponding backend sub class</font>
<font color="#009900">++        '''</font>
<font color="#009900">++        # do not use Finished() in this method</font>
<font color="#009900">++</font>
<font color="#009900">++    @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE,</font>
<font color="#009900">+                          in_signature='s', out_signature='')</font>
<font color="#009900">+     def InstallPublicKey(self, keyurl):</font>
<font color="#009900">+         '''</font>
<font color="#009900">+diff --git a/src/pk-backend-dbus.c b/src/pk-backend-dbus.c</font>
<font color="#009900">+index b06e584..4c6837a 100644</font>
<font color="#009900">+--- a/src/pk-backend-dbus.c</font>
<font color="#009900">++++ b/src/pk-backend-dbus.c</font>
<font color="#009900">+@@ -123,16 +123,6 @@ pk_backend_dbus_sub_percentage_changed_cb (DBusGProxy *proxy, guint sub_percenta</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+- * pk_backend_dbus_no_percentage_updates_cb:</font>
<font color="#009900">+- **/</font>
<font color="#009900">+-static void</font>
<font color="#009900">+-pk_backend_dbus_no_percentage_updates_cb (DBusGProxy *proxy, PkBackendDbus *backend_dbus)</font>
<font color="#009900">+-{</font>
<font color="#009900">+-        pk_debug ("got signal");</font>
<font color="#009900">+-        pk_backend_no_percentage_updates (backend_dbus-&gt;priv-&gt;backend);</font>
<font color="#009900">+-}</font>
<font color="#009900">+-</font>
<font color="#009900">+-/**</font>
<font color="#009900">+  * pk_backend_dbus_package_cb:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ static void</font>
<font color="#009900">+@@ -325,8 +315,6 @@ pk_backend_dbus_remove_callbacks (PkBackendDbus *backend_dbus)</font>
<font color="#009900">+                                         G_CALLBACK (pk_backend_dbus_percentage_changed_cb), backend_dbus);</font>
<font color="#009900">+         dbus_g_proxy_disconnect_signal (proxy, "SubPercentageChanged",</font>
<font color="#009900">+                                         G_CALLBACK (pk_backend_dbus_sub_percentage_changed_cb), backend_dbus);</font>
<font color="#009900">+-        dbus_g_proxy_disconnect_signal (proxy, "NoPercentageChanged",</font>
<font color="#009900">+-                                        G_CALLBACK (pk_backend_dbus_no_percentage_updates_cb), backend_dbus);</font>
<font color="#009900">+         dbus_g_proxy_disconnect_signal (proxy, "Package",</font>
<font color="#009900">+                                         G_CALLBACK (pk_backend_dbus_package_cb), backend_dbus);</font>
<font color="#009900">+         dbus_g_proxy_disconnect_signal (proxy, "Details",</font>
<font color="#009900">+@@ -353,6 +341,31 @@ pk_backend_dbus_remove_callbacks (PkBackendDbus *backend_dbus)</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">++ * pk_backend_dbus_set_proxy:</font>
<font color="#009900">++ **/</font>
<font color="#009900">++static gboolean</font>
<font color="#009900">++pk_backend_dbus_set_proxy (PkBackendDbus *backend_dbus, const gchar *proxy_http, const gchar *proxy_ftp)</font>
<font color="#009900">++{</font>
<font color="#009900">++        gboolean ret;</font>
<font color="#009900">++        GError *error = NULL;</font>
<font color="#009900">++</font>
<font color="#009900">++        g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);</font>
<font color="#009900">++        g_return_val_if_fail (backend_dbus-&gt;priv-&gt;proxy != NULL, FALSE);</font>
<font color="#009900">++</font>
<font color="#009900">++        /* new sync method call */</font>
<font color="#009900">++        pk_backend_dbus_time_reset (backend_dbus);</font>
<font color="#009900">++        ret = dbus_g_proxy_call (backend_dbus-&gt;priv-&gt;proxy, "SetProxy", &amp;error,</font>
<font color="#009900">++                                 G_TYPE_STRING, proxy_http,</font>
<font color="#009900">++                                 G_TYPE_STRING, proxy_ftp,</font>
<font color="#009900">++                                 G_TYPE_INVALID, G_TYPE_INVALID);</font>
<font color="#009900">++        if (error != NULL) {</font>
<font color="#009900">++                pk_warning ("%s", error-&gt;message);</font>
<font color="#009900">++                g_error_free (error);</font>
<font color="#009900">++        }</font>
<font color="#009900">++        return ret;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">+  * pk_backend_dbus_set_name:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ gboolean</font>
<font color="#009900">+@@ -385,7 +398,6 @@ pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service)</font>
<font color="#009900">+                                  G_TYPE_UINT, G_TYPE_INVALID);</font>
<font color="#009900">+         dbus_g_proxy_add_signal (proxy, "SubPercentageChanged",</font>
<font color="#009900">+                                  G_TYPE_UINT, G_TYPE_INVALID);</font>
<font color="#009900">+-        dbus_g_proxy_add_signal (proxy, "NoPercentageChanged", G_TYPE_INVALID);</font>
<font color="#009900">+         dbus_g_proxy_add_signal (proxy, "Package",</font>
<font color="#009900">+                                  G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);</font>
<font color="#009900">+         dbus_g_proxy_add_signal (proxy, "Details",</font>
<font color="#009900">+@@ -424,8 +436,6 @@ pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service)</font>
<font color="#009900">+                                      G_CALLBACK (pk_backend_dbus_percentage_changed_cb), backend_dbus, NULL);</font>
<font color="#009900">+         dbus_g_proxy_connect_signal (proxy, "SubPercentageChanged",</font>
<font color="#009900">+                                      G_CALLBACK (pk_backend_dbus_sub_percentage_changed_cb), backend_dbus, NULL);</font>
<font color="#009900">+-        dbus_g_proxy_connect_signal (proxy, "NoPercentageChanged",</font>
<font color="#009900">+-                                     G_CALLBACK (pk_backend_dbus_no_percentage_updates_cb), backend_dbus, NULL);</font>
<font color="#009900">+         dbus_g_proxy_connect_signal (proxy, "Package",</font>
<font color="#009900">+                                      G_CALLBACK (pk_backend_dbus_package_cb), backend_dbus, NULL);</font>
<font color="#009900">+         dbus_g_proxy_connect_signal (proxy, "Details",</font>
<font color="#009900">+@@ -465,6 +475,18 @@ pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service)</font>
<font color="#009900">+                 pk_backend_finished (backend_dbus-&gt;priv-&gt;backend);</font>
<font color="#009900">+                 g_error_free (error);</font>
<font color="#009900">+         }</font>
<font color="#009900">++</font>
<font color="#009900">++        /* set the proxy */</font>
<font color="#009900">++        if (ret) {</font>
<font color="#009900">++                gchar *proxy_http;</font>
<font color="#009900">++                gchar *proxy_ftp;</font>
<font color="#009900">++                proxy_http = pk_backend_get_proxy_http (backend_dbus-&gt;priv-&gt;backend);</font>
<font color="#009900">++                proxy_ftp = pk_backend_get_proxy_http (backend_dbus-&gt;priv-&gt;backend);</font>
<font color="#009900">++                pk_backend_dbus_set_proxy (backend_dbus, proxy_http, proxy_ftp);</font>
<font color="#009900">++                g_free (proxy_http);</font>
<font color="#009900">++                g_free (proxy_ftp);</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">+         if (ret) {</font>
<font color="#009900">+                 pk_backend_dbus_time_check (backend_dbus);</font>
<font color="#009900">+         }</font>
<font color="#009900">+diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h</font>
<font color="#009900">+index 2213fed..2bffaff 100644</font>
<font color="#009900">+--- a/src/pk-backend-internal.h</font>
<font color="#009900">++++ b/src/pk-backend-internal.h</font>
<font color="#009900">+@@ -59,6 +59,9 @@ gboolean         pk_backend_reset                        (PkBackend        *backend);</font>
<font color="#009900">+ gboolean         pk_backend_set_name                        (PkBackend        *backend,</font>
<font color="#009900">+                                                          const gchar        *name)</font>
<font color="#009900">+                                                          G_GNUC_WARN_UNUSED_RESULT;</font>
<font color="#009900">++gboolean         pk_backend_set_proxy                        (PkBackend        *backend,</font>
<font color="#009900">++                                                         const gchar        *proxy_http,</font>
<font color="#009900">++                                                         const gchar        *proxy_ftp);</font>
<font color="#009900">+ gchar                *pk_backend_get_name                        (PkBackend        *backend)</font>
<font color="#009900">+                                                          G_GNUC_WARN_UNUSED_RESULT;</font>
<font color="#009900">+ gboolean         pk_backend_get_backend_detail                (PkBackend        *backend,</font>
<font color="#009900">+diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c</font>
<font color="#009900">+index f9e8b68..f9c9f12 100644</font>
<font color="#009900">+--- a/src/pk-backend-spawn.c</font>
<font color="#009900">++++ b/src/pk-backend-spawn.c</font>
<font color="#009900">+@@ -313,7 +313,7 @@ pk_backend_spawn_parse_stdout (PkBackendSpawn *backend_spawn, const gchar *line)</font>
<font color="#009900">+                         ret = FALSE;</font>
<font color="#009900">+                         goto out;</font>
<font color="#009900">+                 }</font>
<font color="#009900">+-                pk_backend_no_percentage_updates (backend_spawn-&gt;priv-&gt;backend);</font>
<font color="#009900">++                pk_backend_set_percentage (backend_spawn-&gt;priv-&gt;backend, PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+         } else if (pk_strequal (command, "repo-signature-required")) {</font>
<font color="#009900">+ </font>
<font color="#009900">+                 if (size != 9+99) {</font>
<font color="#009900">+@@ -440,6 +440,44 @@ pk_backend_spawn_helper_new (PkBackendSpawn *backend_spawn)</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">++ * pk_backend_spawn_get_envp:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Return all the environment variables the script will need</font>
<font color="#009900">++ **/</font>
<font color="#009900">++static gchar **</font>
<font color="#009900">++pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)</font>
<font color="#009900">++{</font>
<font color="#009900">++        gchar **envp;</font>
<font color="#009900">++        gchar *value;</font>
<font color="#009900">++        gchar *line;</font>
<font color="#009900">++        GPtrArray *array;</font>
<font color="#009900">++</font>
<font color="#009900">++        array = g_ptr_array_new ();</font>
<font color="#009900">++</font>
<font color="#009900">++        /* http_proxy */</font>
<font color="#009900">++        value = pk_backend_get_proxy_http (backend_spawn-&gt;priv-&gt;backend);</font>
<font color="#009900">++        if (!pk_strzero (value)) {</font>
<font color="#009900">++                line = g_strdup_printf ("%s=%s", "http_proxy", value);</font>
<font color="#009900">++                pk_debug ("setting evp '%s'", line);</font>
<font color="#009900">++                g_ptr_array_add (array, line);</font>
<font color="#009900">++        }</font>
<font color="#009900">++        g_free (value);</font>
<font color="#009900">++</font>
<font color="#009900">++        /* ftp_proxy */</font>
<font color="#009900">++        value = pk_backend_get_proxy_ftp (backend_spawn-&gt;priv-&gt;backend);</font>
<font color="#009900">++        if (!pk_strzero (value)) {</font>
<font color="#009900">++                line = g_strdup_printf ("%s=%s", "ftp_proxy", value);</font>
<font color="#009900">++                pk_debug ("setting evp '%s'", line);</font>
<font color="#009900">++                g_ptr_array_add (array, line);</font>
<font color="#009900">++        }</font>
<font color="#009900">++        g_free (value);</font>
<font color="#009900">++</font>
<font color="#009900">++        envp = pk_ptr_array_to_argv (array);</font>
<font color="#009900">++        g_ptr_array_free (array, TRUE);</font>
<font color="#009900">++        return envp;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">+  * pk_backend_spawn_helper_va_list:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ static gboolean</font>
<font color="#009900">+@@ -448,6 +486,7 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe</font>
<font color="#009900">+         gboolean ret;</font>
<font color="#009900">+         gchar *filename;</font>
<font color="#009900">+         gchar **argv;</font>
<font color="#009900">++        gchar **envp;</font>
<font color="#009900">+ </font>
<font color="#009900">+         g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -476,7 +515,8 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe</font>
<font color="#009900">+         argv[0] = g_strdup (filename);</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_spawn_helper_new (backend_spawn);</font>
<font color="#009900">+-        ret = pk_spawn_argv (backend_spawn-&gt;priv-&gt;spawn, argv);</font>
<font color="#009900">++        envp = pk_backend_spawn_get_envp (backend_spawn);</font>
<font color="#009900">++        ret = pk_spawn_argv (backend_spawn-&gt;priv-&gt;spawn, argv, envp);</font>
<font color="#009900">+         if (!ret) {</font>
<font color="#009900">+                 pk_backend_spawn_helper_delete (backend_spawn);</font>
<font color="#009900">+                 pk_backend_error_code (backend_spawn-&gt;priv-&gt;backend, PK_ERROR_ENUM_INTERNAL_ERROR,</font>
<font color="#009900">+diff --git a/src/pk-backend.c b/src/pk-backend.c</font>
<font color="#009900">+index 225c488..37ed024 100644</font>
<font color="#009900">+--- a/src/pk-backend.c</font>
<font color="#009900">++++ b/src/pk-backend.c</font>
<font color="#009900">+@@ -33,6 +33,7 @@</font>
<font color="#009900">+ #include &lt;glib/gprintf.h&gt;</font>
<font color="#009900">+ #include &lt;pk-network.h&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">++#include "pk-package-item.h"</font>
<font color="#009900">+ #include "pk-debug.h"</font>
<font color="#009900">+ #include "pk-common.h"</font>
<font color="#009900">+ #include "pk-marshal.h"</font>
<font color="#009900">+@@ -44,13 +45,6 @@</font>
<font color="#009900">+ #define PK_BACKEND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_BACKEND, PkBackendPrivate))</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+- * PK_BACKEND_PERCENTAGE_INVALID:</font>
<font color="#009900">+- *</font>
<font color="#009900">+- * The unknown percentage value</font>
<font color="#009900">+- */</font>
<font color="#009900">+-#define PK_BACKEND_PERCENTAGE_INVALID                101</font>
<font color="#009900">+-</font>
<font color="#009900">+-/**</font>
<font color="#009900">+  * PK_BACKEND_PERCENTAGE_DEFAULT:</font>
<font color="#009900">+  *</font>
<font color="#009900">+  * The default percentage value, should never be emitted, but should be</font>
<font color="#009900">+@@ -84,12 +78,15 @@ struct _PkBackendPrivate</font>
<font color="#009900">+         GHashTable                *eulas;</font>
<font color="#009900">+         gchar                        *name;</font>
<font color="#009900">+         gchar                        *c_tid;</font>
<font color="#009900">++        gchar                        *proxy_http;</font>
<font color="#009900">++        gchar                        *proxy_ftp;</font>
<font color="#009900">+         gboolean                 locked;</font>
<font color="#009900">+         gboolean                 set_error;</font>
<font color="#009900">+         gboolean                 set_signature;</font>
<font color="#009900">+         gboolean                 set_eula;</font>
<font color="#009900">+         gboolean                 has_sent_package;</font>
<font color="#009900">+         PkNetwork                *network;</font>
<font color="#009900">++        PkPackageItem                *last_package;</font>
<font color="#009900">+         PkRoleEnum                 role; /* this never changes for the lifetime of a transaction */</font>
<font color="#009900">+         PkStatusEnum                 status; /* this changes */</font>
<font color="#009900">+         PkExitEnum                 exit;</font>
<font color="#009900">+@@ -592,6 +589,44 @@ out:</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">++ * pk_backend_set_proxy:</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gboolean</font>
<font color="#009900">++pk_backend_set_proxy (PkBackend        *backend, const gchar *proxy_http, const gchar *proxy_ftp)</font>
<font color="#009900">++{</font>
<font color="#009900">++        g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);</font>
<font color="#009900">++        g_free (backend-&gt;priv-&gt;proxy_http);</font>
<font color="#009900">++        g_free (backend-&gt;priv-&gt;proxy_ftp);</font>
<font color="#009900">++        backend-&gt;priv-&gt;proxy_http = g_strdup (proxy_http);</font>
<font color="#009900">++        backend-&gt;priv-&gt;proxy_ftp = g_strdup (proxy_ftp);</font>
<font color="#009900">++        return TRUE;</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * pk_backend_get_proxy_http:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Return value: proxy string in the form username:password@server:port</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gchar *</font>
<font color="#009900">++pk_backend_get_proxy_http (PkBackend *backend)</font>
<font color="#009900">++{</font>
<font color="#009900">++        g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);</font>
<font color="#009900">++        return g_strdup (backend-&gt;priv-&gt;proxy_http);</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">++ * pk_backend_get_proxy_ftp:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * Return value: proxy string in the form username:password@server:port</font>
<font color="#009900">++ **/</font>
<font color="#009900">++gchar *</font>
<font color="#009900">++pk_backend_get_proxy_ftp (PkBackend *backend)</font>
<font color="#009900">++{</font>
<font color="#009900">++        g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);</font>
<font color="#009900">++        return g_strdup (backend-&gt;priv-&gt;proxy_ftp);</font>
<font color="#009900">++}</font>
<font color="#009900">++</font>
<font color="#009900">++/**</font>
<font color="#009900">+  * pk_backend_lock:</font>
<font color="#009900">+  *</font>
<font color="#009900">+  * Responsible for initialising the external backend object.</font>
<font color="#009900">+@@ -803,35 +838,6 @@ pk_backend_set_sub_percentage (PkBackend *backend, guint percentage)</font>
<font color="#009900">+ }</font>
<font color="#009900">+ </font>
<font color="#009900">+ /**</font>
<font color="#009900">+- * pk_backend_no_percentage_updates:</font>
<font color="#009900">+- **/</font>
<font color="#009900">+-gboolean</font>
<font color="#009900">+-pk_backend_no_percentage_updates (PkBackend *backend)</font>
<font color="#009900">+-{</font>
<font color="#009900">+-        g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);</font>
<font color="#009900">+-        g_return_val_if_fail (backend-&gt;priv-&gt;locked != FALSE, FALSE);</font>
<font color="#009900">+-</font>
<font color="#009900">+-        /* have we already set an error? */</font>
<font color="#009900">+-        if (backend-&gt;priv-&gt;set_error) {</font>
<font color="#009900">+-                pk_warning ("already set error, cannot process");</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">+-        }</font>
<font color="#009900">+-</font>
<font color="#009900">+-        /* set the same twice? */</font>
<font color="#009900">+-        if (backend-&gt;priv-&gt;last_percentage == PK_BACKEND_PERCENTAGE_INVALID) {</font>
<font color="#009900">+-                pk_debug ("duplicate set of %i", PK_BACKEND_PERCENTAGE_INVALID);</font>
<font color="#009900">+-                return FALSE;</font>
<font color="#009900">+-        }</font>
<font color="#009900">+-</font>
<font color="#009900">+-        /* invalidate previous percentage */</font>
<font color="#009900">+-        backend-&gt;priv-&gt;last_percentage = PK_BACKEND_PERCENTAGE_INVALID;</font>
<font color="#009900">+-</font>
<font color="#009900">+-        /* emit the progress changed signal */</font>
<font color="#009900">+-        pk_backend_emit_progress_changed (backend);</font>
<font color="#009900">+-        return TRUE;</font>
<font color="#009900">+-}</font>
<font color="#009900">+-</font>
<font color="#009900">+-/**</font>
<font color="#009900">+  * pk_backend_set_status:</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ gboolean</font>
<font color="#009900">+@@ -901,11 +907,26 @@ gboolean</font>
<font color="#009900">+ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id, const gchar *summary)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         gchar *summary_safe;</font>
<font color="#009900">++        PkPackageItem *item;</font>
<font color="#009900">++        gboolean ret;</font>
<font color="#009900">+ </font>
<font color="#009900">+         g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);</font>
<font color="#009900">+         g_return_val_if_fail (package_id != NULL, FALSE);</font>
<font color="#009900">+         g_return_val_if_fail (backend-&gt;priv-&gt;locked != FALSE, FALSE);</font>
<font color="#009900">+ </font>
<font color="#009900">++        /* check against the old one */</font>
<font color="#009900">++        item = pk_package_item_new (info, package_id, summary);</font>
<font color="#009900">++        ret = pk_package_item_equal (item, backend-&gt;priv-&gt;last_package);</font>
<font color="#009900">++        if (ret) {</font>
<font color="#009900">++                pk_package_item_free (item);</font>
<font color="#009900">++                pk_debug ("skipping duplicate %s", package_id);</font>
<font color="#009900">++                return FALSE;</font>
<font color="#009900">++        }</font>
<font color="#009900">++        /* update the 'last' package */</font>
<font color="#009900">++        pk_package_item_free (backend-&gt;priv-&gt;last_package);</font>
<font color="#009900">++        backend-&gt;priv-&gt;last_package = pk_package_item_copy (item);</font>
<font color="#009900">++        pk_package_item_free (item);</font>
<font color="#009900">++</font>
<font color="#009900">+         /* have we already set an error? */</font>
<font color="#009900">+         if (backend-&gt;priv-&gt;set_error) {</font>
<font color="#009900">+                 pk_warning ("already set error, cannot process");</font>
<font color="#009900">+@@ -1689,6 +1710,8 @@ pk_backend_finalize (GObject *object)</font>
<font color="#009900">+         pk_debug ("backend finalise");</font>
<font color="#009900">+ </font>
<font color="#009900">+         pk_backend_reset (backend);</font>
<font color="#009900">++        g_free (backend-&gt;priv-&gt;proxy_http);</font>
<font color="#009900">++        g_free (backend-&gt;priv-&gt;proxy_ftp);</font>
<font color="#009900">+         g_free (backend-&gt;priv-&gt;name);</font>
<font color="#009900">+         g_free (backend-&gt;priv-&gt;c_tid);</font>
<font color="#009900">+         g_object_unref (backend-&gt;priv-&gt;time);</font>
<font color="#009900">+@@ -1818,6 +1841,7 @@ pk_backend_reset (PkBackend *backend)</font>
<font color="#009900">+ </font>
<font color="#009900">+         /* TODO: need to wait for Finished() if running */</font>
<font color="#009900">+ </font>
<font color="#009900">++        pk_package_item_free (backend-&gt;priv-&gt;last_package);</font>
<font color="#009900">+         backend-&gt;priv-&gt;set_error = FALSE;</font>
<font color="#009900">+         backend-&gt;priv-&gt;set_signature = FALSE;</font>
<font color="#009900">+         backend-&gt;priv-&gt;set_eula = FALSE;</font>
<font color="#009900">+@@ -1825,6 +1849,7 @@ pk_backend_reset (PkBackend *backend)</font>
<font color="#009900">+         backend-&gt;priv-&gt;finished = FALSE;</font>
<font color="#009900">+         backend-&gt;priv-&gt;has_sent_package = FALSE;</font>
<font color="#009900">+         backend-&gt;priv-&gt;thread = NULL;</font>
<font color="#009900">++        backend-&gt;priv-&gt;last_package = NULL;</font>
<font color="#009900">+         backend-&gt;priv-&gt;status = PK_STATUS_ENUM_UNKNOWN;</font>
<font color="#009900">+         backend-&gt;priv-&gt;exit = PK_EXIT_ENUM_UNKNOWN;</font>
<font color="#009900">+         backend-&gt;priv-&gt;role = PK_ROLE_ENUM_UNKNOWN;</font>
<font color="#009900">+@@ -1855,8 +1880,11 @@ pk_backend_init (PkBackend *backend)</font>
<font color="#009900">+         backend-&gt;priv-&gt;handle = NULL;</font>
<font color="#009900">+         backend-&gt;priv-&gt;name = NULL;</font>
<font color="#009900">+         backend-&gt;priv-&gt;c_tid = NULL;</font>
<font color="#009900">++        backend-&gt;priv-&gt;proxy_http = NULL;</font>
<font color="#009900">++        backend-&gt;priv-&gt;proxy_ftp = NULL;</font>
<font color="#009900">+         backend-&gt;priv-&gt;file_changed_func = NULL;</font>
<font color="#009900">+         backend-&gt;priv-&gt;file_changed_data = NULL;</font>
<font color="#009900">++        backend-&gt;priv-&gt;last_package = NULL;</font>
<font color="#009900">+         backend-&gt;priv-&gt;locked = FALSE;</font>
<font color="#009900">+         backend-&gt;priv-&gt;signal_finished = 0;</font>
<font color="#009900">+         backend-&gt;priv-&gt;signal_error_timeout = 0;</font>
<font color="#009900">+diff --git a/src/pk-backend.h b/src/pk-backend.h</font>
<font color="#009900">+index 95b7fa8..fb17e3c 100644</font>
<font color="#009900">+--- a/src/pk-backend.h</font>
<font color="#009900">++++ b/src/pk-backend.h</font>
<font color="#009900">+@@ -30,6 +30,13 @@</font>
<font color="#009900">+ </font>
<font color="#009900">+ G_BEGIN_DECLS</font>
<font color="#009900">+ </font>
<font color="#009900">++/**</font>
<font color="#009900">++ * PK_BACKEND_PERCENTAGE_INVALID:</font>
<font color="#009900">++ *</font>
<font color="#009900">++ * The unknown percentage value</font>
<font color="#009900">++ */</font>
<font color="#009900">++#define PK_BACKEND_PERCENTAGE_INVALID                101</font>
<font color="#009900">++</font>
<font color="#009900">+ typedef struct _PkBackend PkBackend;</font>
<font color="#009900">+ </font>
<font color="#009900">+ /* set the state */</font>
<font color="#009900">+@@ -51,7 +58,6 @@ gboolean         pk_backend_set_sub_percentage                (PkBackend        *backend,</font>
<font color="#009900">+                                                          guint                 percentage);</font>
<font color="#009900">+ gboolean         pk_backend_set_exit_code                (PkBackend        *backend,</font>
<font color="#009900">+                                                          PkExitEnum         exit);</font>
<font color="#009900">+-gboolean         pk_backend_no_percentage_updates        (PkBackend        *backend);</font>
<font color="#009900">+ gboolean         pk_backend_set_transaction_data        (PkBackend        *backend,</font>
<font color="#009900">+                                                          const gchar        *data);</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -66,6 +72,8 @@ gboolean         pk_backend_get_progress                (PkBackend        *backend,</font>
<font color="#009900">+                                                          guint                *elapsed,</font>
<font color="#009900">+                                                          guint                *remaining);</font>
<font color="#009900">+ guint                 pk_backend_get_runtime                        (PkBackend        *backend);</font>
<font color="#009900">++gchar                *pk_backend_get_proxy_ftp                (PkBackend        *backend);</font>
<font color="#009900">++gchar                *pk_backend_get_proxy_http                (PkBackend        *backend);</font>
<font color="#009900">+ </font>
<font color="#009900">+ /* signal helpers */</font>
<font color="#009900">+ gboolean         pk_backend_finished                        (PkBackend        *backend);</font>
<font color="#009900">+diff --git a/src/pk-engine.c b/src/pk-engine.c</font>
<font color="#009900">+index db81d36..028a0d0 100644</font>
<font color="#009900">+--- a/src/pk-engine.c</font>
<font color="#009900">++++ b/src/pk-engine.c</font>
<font color="#009900">+@@ -101,6 +101,7 @@ struct PkEnginePrivate</font>
<font color="#009900">+         PkNetwork                *network;</font>
<font color="#009900">+         PkSecurity                *security;</font>
<font color="#009900">+         PkNotify                *notify;</font>
<font color="#009900">++        PkConf                        *conf;</font>
<font color="#009900">+         PkFileMonitor                *file_monitor;</font>
<font color="#009900">+         PkRoleEnum                 actions;</font>
<font color="#009900">+         PkGroupEnum                 groups;</font>
<font color="#009900">+@@ -579,10 +580,15 @@ pk_engine_init (PkEngine *engine)</font>
<font color="#009900">+         DBusGConnection *connection;</font>
<font color="#009900">+         gboolean ret;</font>
<font color="#009900">+         gchar *filename;</font>
<font color="#009900">++        gchar *proxy_http;</font>
<font color="#009900">++        gchar *proxy_ftp;</font>
<font color="#009900">+ </font>
<font color="#009900">+         engine-&gt;priv = PK_ENGINE_GET_PRIVATE (engine);</font>
<font color="#009900">+         engine-&gt;priv-&gt;restart_schedule = FALSE;</font>
<font color="#009900">+ </font>
<font color="#009900">++        /* use the config file */</font>
<font color="#009900">++        engine-&gt;priv-&gt;conf = pk_conf_new ();</font>
<font color="#009900">++</font>
<font color="#009900">+         /* setup the backend backend */</font>
<font color="#009900">+         engine-&gt;priv-&gt;backend = pk_backend_new ();</font>
<font color="#009900">+         g_signal_connect (engine-&gt;priv-&gt;backend, "finished",</font>
<font color="#009900">+@@ -639,6 +645,13 @@ pk_engine_init (PkEngine *engine)</font>
<font color="#009900">+                           G_CALLBACK (pk_engine_file_monitor_changed_cb), engine);</font>
<font color="#009900">+         g_free (filename);</font>
<font color="#009900">+ </font>
<font color="#009900">++        /* set the proxy */</font>
<font color="#009900">++        proxy_http = pk_conf_get_string (engine-&gt;priv-&gt;conf, "ProxyHTTP");</font>
<font color="#009900">++        proxy_ftp = pk_conf_get_string (engine-&gt;priv-&gt;conf, "ProxyFTP");</font>
<font color="#009900">++        pk_backend_set_proxy (engine-&gt;priv-&gt;backend, proxy_http, proxy_ftp);</font>
<font color="#009900">++        g_free (proxy_http);</font>
<font color="#009900">++        g_free (proxy_ftp);</font>
<font color="#009900">++</font>
<font color="#009900">+         engine-&gt;priv-&gt;transaction_list = pk_transaction_list_new ();</font>
<font color="#009900">+         g_signal_connect (engine-&gt;priv-&gt;transaction_list, "changed",</font>
<font color="#009900">+                           G_CALLBACK (pk_engine_transaction_list_changed_cb), engine);</font>
<font color="#009900">+@@ -696,6 +709,7 @@ pk_engine_finalize (GObject *object)</font>
<font color="#009900">+         g_object_unref (engine-&gt;priv-&gt;notify);</font>
<font color="#009900">+         g_object_unref (engine-&gt;priv-&gt;backend);</font>
<font color="#009900">+         g_object_unref (engine-&gt;priv-&gt;cache);</font>
<font color="#009900">++        g_object_unref (engine-&gt;priv-&gt;conf);</font>
<font color="#009900">+ </font>
<font color="#009900">+         G_OBJECT_CLASS (pk_engine_parent_class)-&gt;finalize (object);</font>
<font color="#009900">+ }</font>
<font color="#009900">+diff --git a/src/pk-network-unix.c b/src/pk-network-unix.c</font>
<font color="#009900">+index 11c23a2..74b266c 100644</font>
<font color="#009900">+--- a/src/pk-network-unix.c</font>
<font color="#009900">++++ b/src/pk-network-unix.c</font>
<font color="#009900">+@@ -138,6 +138,11 @@ pk_network_unix_get_network_state (PkNetworkUnix *network_unix)</font>
<font color="#009900">+                         continue;</font>
<font color="#009900">+                 }</font>
<font color="#009900">+ </font>
<font color="#009900">++                /* is loopback? */</font>
<font color="#009900">++                if (pk_strequal (sections[0], "lo")) {</font>
<font color="#009900">++                        continue;</font>
<font color="#009900">++                }</font>
<font color="#009900">++</font>
<font color="#009900">+                 /* is correct parameters? */</font>
<font color="#009900">+                 number_sections = g_strv_length (sections);</font>
<font color="#009900">+                 if (number_sections != 11) {</font>
<font color="#009900">+@@ -145,9 +150,8 @@ pk_network_unix_get_network_state (PkNetworkUnix *network_unix)</font>
<font color="#009900">+                         continue;</font>
<font color="#009900">+                 }</font>
<font color="#009900">+ </font>
<font color="#009900">+-                /* is MTU and gateway nonzero? */</font>
<font color="#009900">+-                if (!pk_strequal (sections[8], "0") &amp;&amp;</font>
<font color="#009900">+-                    !pk_strequal (sections[2], "00000000")) {</font>
<font color="#009900">++                /* is gateway nonzero? */</font>
<font color="#009900">++                if (!pk_strequal (sections[2], "00000000")) {</font>
<font color="#009900">+                         pk_debug ("interface %s is valid", sections[0]);</font>
<font color="#009900">+                         online = TRUE;</font>
<font color="#009900">+                 }</font>
<font color="#009900">+diff --git a/src/pk-network.c b/src/pk-network.c</font>
<font color="#009900">+index 9656958..0ad839e 100644</font>
<font color="#009900">+--- a/src/pk-network.c</font>
<font color="#009900">++++ b/src/pk-network.c</font>
<font color="#009900">+@@ -39,6 +39,7 @@</font>
<font color="#009900">+ #ifdef HAVE_UNISTD_H</font>
<font color="#009900">+ #include &lt;unistd.h&gt;</font>
<font color="#009900">+ #endif /* HAVE_UNISTD_H */</font>
<font color="#009900">++#include &lt;libgbus.h&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+ #include &lt;glib/gi18n.h&gt;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -67,6 +68,7 @@ struct _PkNetworkPrivate</font>
<font color="#009900">+         PkNetworkNm                *net_nm;</font>
<font color="#009900">+         PkNetworkUnix                *net_unix;</font>
<font color="#009900">+         PkConf                        *conf;</font>
<font color="#009900">++        LibGBus                        *nm_bus;</font>
<font color="#009900">+ };</font>
<font color="#009900">+ </font>
<font color="#009900">+ enum {</font>
<font color="#009900">+@@ -154,6 +156,7 @@ pk_network_class_init (PkNetworkClass *klass)</font>
<font color="#009900">+ static void</font>
<font color="#009900">+ pk_network_init (PkNetwork *network)</font>
<font color="#009900">+ {</font>
<font color="#009900">++        gboolean nm_alive;</font>
<font color="#009900">+         network-&gt;priv = PK_NETWORK_GET_PRIVATE (network);</font>
<font color="#009900">+         network-&gt;priv-&gt;conf = pk_conf_new ();</font>
<font color="#009900">+         network-&gt;priv-&gt;net_nm = pk_network_nm_new ();</font>
<font color="#009900">+@@ -167,6 +170,17 @@ pk_network_init (PkNetwork *network)</font>
<font color="#009900">+         network-&gt;priv-&gt;use_nm = pk_conf_get_bool (network-&gt;priv-&gt;conf, "UseNetworkManager");</font>
<font color="#009900">+         network-&gt;priv-&gt;use_unix = pk_conf_get_bool (network-&gt;priv-&gt;conf, "UseNetworkHeuristic");</font>
<font color="#009900">+ </font>
<font color="#009900">++        /* check if NM is on the bus */</font>
<font color="#009900">++        network-&gt;priv-&gt;nm_bus = libgbus_new ();</font>
<font color="#009900">++        libgbus_assign (network-&gt;priv-&gt;nm_bus, LIBGBUS_SYSTEM, "org.freedesktop.NetworkManager");</font>
<font color="#009900">++        nm_alive = libgbus_is_connected (network-&gt;priv-&gt;nm_bus);</font>
<font color="#009900">++</font>
<font color="#009900">++        /* NetworkManager isn't up, so we can't use it */</font>
<font color="#009900">++        if (network-&gt;priv-&gt;use_nm &amp;&amp; !nm_alive) {</font>
<font color="#009900">++                pk_warning ("UseNetworkManager true, but org.freedesktop.NetworkManager not up");</font>
<font color="#009900">++                network-&gt;priv-&gt;use_nm = FALSE;</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">+ #if !PK_BUILD_NETWORKMANAGER</font>
<font color="#009900">+         /* check we can actually use the default */</font>
<font color="#009900">+         if (network-&gt;priv-&gt;use_nm) {</font>
<font color="#009900">+@@ -190,6 +204,7 @@ pk_network_finalize (GObject *object)</font>
<font color="#009900">+ </font>
<font color="#009900">+         g_return_if_fail (network-&gt;priv != NULL);</font>
<font color="#009900">+         g_object_unref (network-&gt;priv-&gt;conf);</font>
<font color="#009900">++        g_object_unref (network-&gt;priv-&gt;nm_bus);</font>
<font color="#009900">+         g_object_unref (network-&gt;priv-&gt;net_nm);</font>
<font color="#009900">+         g_object_unref (network-&gt;priv-&gt;net_unix);</font>
<font color="#009900">+         G_OBJECT_CLASS (pk_network_parent_class)-&gt;finalize (object);</font>
<font color="#009900">+diff --git a/src/pk-spawn.c b/src/pk-spawn.c</font>
<font color="#009900">+index 9b415b1..c4622f9 100644</font>
<font color="#009900">+--- a/src/pk-spawn.c</font>
<font color="#009900">++++ b/src/pk-spawn.c</font>
<font color="#009900">+@@ -273,7 +273,7 @@ pk_spawn_kill (PkSpawn *spawn)</font>
<font color="#009900">+  *</font>
<font color="#009900">+  **/</font>
<font color="#009900">+ gboolean</font>
<font color="#009900">+-pk_spawn_argv (PkSpawn *spawn, gchar **argv)</font>
<font color="#009900">++pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp)</font>
<font color="#009900">+ {</font>
<font color="#009900">+         gboolean ret;</font>
<font color="#009900">+ </font>
<font color="#009900">+@@ -284,7 +284,7 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv)</font>
<font color="#009900">+         spawn-&gt;priv-&gt;finished = FALSE;</font>
<font color="#009900">+ </font>
<font color="#009900">+         /* create spawned object for tracking */</font>
<font color="#009900">+-        ret = g_spawn_async_with_pipes (NULL, argv, NULL,</font>
<font color="#009900">++        ret = g_spawn_async_with_pipes (NULL, argv, envp,</font>
<font color="#009900">+                                  G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,</font>
<font color="#009900">+                                  NULL, NULL, &amp;spawn-&gt;priv-&gt;child_pid,</font>
<font color="#009900">+                                  NULL, /* stdin */</font>
<font color="#009900">+@@ -484,6 +484,7 @@ libst_spawn (LibSelfTest *test)</font>
<font color="#009900">+         gboolean ret;</font>
<font color="#009900">+         gchar *path;</font>
<font color="#009900">+         gchar **argv;</font>
<font color="#009900">++        gchar **envp;</font>
<font color="#009900">+ </font>
<font color="#009900">+         if (libst_start (test, "PkSpawn", CLASS_AUTO) == FALSE) {</font>
<font color="#009900">+                 return;</font>
<font color="#009900">+@@ -496,7 +497,7 @@ libst_spawn (LibSelfTest *test)</font>
<font color="#009900">+         libst_title (test, "make sure return error for missing file");</font>
<font color="#009900">+         mexit = BAD_EXIT;</font>
<font color="#009900">+         argv = g_strsplit ("pk-spawn-test-xxx.sh", " ", 0);</font>
<font color="#009900">+-        ret = pk_spawn_argv (spawn, argv);</font>
<font color="#009900">++        ret = pk_spawn_argv (spawn, argv, NULL);</font>
<font color="#009900">+         g_strfreev (argv);</font>
<font color="#009900">+         if (ret == FALSE) {</font>
<font color="#009900">+                 libst_success (test, "failed to run invalid file");</font>
<font color="#009900">+@@ -517,7 +518,7 @@ libst_spawn (LibSelfTest *test)</font>
<font color="#009900">+         mexit = -1;</font>
<font color="#009900">+         path = pk_test_get_data ("pk-spawn-test.sh");</font>
<font color="#009900">+         argv = g_strsplit (path, " ", 0);</font>
<font color="#009900">+-        ret = pk_spawn_argv (spawn, argv);</font>
<font color="#009900">++        ret = pk_spawn_argv (spawn, argv, NULL);</font>
<font color="#009900">+         g_free (path);</font>
<font color="#009900">+         g_strfreev (argv);</font>
<font color="#009900">+         if (ret) {</font>
<font color="#009900">+@@ -558,11 +559,34 @@ libst_spawn (LibSelfTest *test)</font>
<font color="#009900">+         new_spawn_object (test, &amp;spawn);</font>
<font color="#009900">+ </font>
<font color="#009900">+         /************************************************************/</font>
<font color="#009900">++        libst_title (test, "make sure we set the proxy");</font>
<font color="#009900">++        mexit = -1;</font>
<font color="#009900">++        path = pk_test_get_data ("pk-spawn-proxy.sh");</font>
<font color="#009900">++        argv = g_strsplit (path, " ", 0);</font>
<font color="#009900">++        envp = g_strsplit ("http_proxy=username:password@server:port "</font>
<font color="#009900">++                           "ftp_proxy=username:password@server:port", " ", 0);</font>
<font color="#009900">++        ret = pk_spawn_argv (spawn, argv, envp);</font>
<font color="#009900">++        g_free (path);</font>
<font color="#009900">++        g_strfreev (argv);</font>
<font color="#009900">++        if (ret) {</font>
<font color="#009900">++                libst_success (test, "ran correct file");</font>
<font color="#009900">++        } else {</font>
<font color="#009900">++                libst_failed (test, "did not run helper");</font>
<font color="#009900">++        }</font>
<font color="#009900">++</font>
<font color="#009900">++        /* wait for finished */</font>
<font color="#009900">++        libst_loopwait (test, 10000);</font>
<font color="#009900">++        libst_loopcheck (test);</font>
<font color="#009900">++</font>
<font color="#009900">++        /* get new object */</font>
<font color="#009900">++        new_spawn_object (test, &amp;spawn);</font>
<font color="#009900">++</font>
<font color="#009900">++        /************************************************************/</font>
<font color="#009900">+         libst_title (test, "make sure run correct helper, and kill it");</font>
<font color="#009900">+         mexit = BAD_EXIT;</font>
<font color="#009900">+         path = pk_test_get_data ("pk-spawn-test.sh");</font>
<font color="#009900">+         argv = g_strsplit (path, " ", 0);</font>
<font color="#009900">+-        ret = pk_spawn_argv (spawn, argv);</font>
<font color="#009900">++        ret = pk_spawn_argv (spawn, argv, NULL);</font>
<font color="#009900">+         g_free (path);</font>
<font color="#009900">+         g_strfreev (argv);</font>
<font color="#009900">+         if (ret) {</font>
<font color="#009900">+@@ -592,7 +616,7 @@ libst_spawn (LibSelfTest *test)</font>
<font color="#009900">+         mexit = BAD_EXIT;</font>
<font color="#009900">+         path = pk_test_get_data ("pk-spawn-test-sigquit.sh");</font>
<font color="#009900">+         argv = g_strsplit (path, " ", 0);</font>
<font color="#009900">+-        ret = pk_spawn_argv (spawn, argv);</font>
<font color="#009900">++        ret = pk_spawn_argv (spawn, argv, NULL);</font>
<font color="#009900">+         g_free (path);</font>
<font color="#009900">+         g_strfreev (argv);</font>
<font color="#009900">+         if (ret) {</font>
<font color="#009900">+@@ -618,7 +642,7 @@ libst_spawn (LibSelfTest *test)</font>
<font color="#009900">+         libst_title (test, "run lots of data for profiling");</font>
<font color="#009900">+         path = pk_test_get_data ("pk-spawn-test-profiling.sh");</font>
<font color="#009900">+         argv = g_strsplit (path, " ", 0);</font>
<font color="#009900">+-        ret = pk_spawn_argv (spawn, argv);</font>
<font color="#009900">++        ret = pk_spawn_argv (spawn, argv, NULL);</font>
<font color="#009900">+         g_free (path);</font>
<font color="#009900">+         g_strfreev (argv);</font>
<font color="#009900">+         if (ret) {</font>
<font color="#009900">+diff --git a/src/pk-spawn.h b/src/pk-spawn.h</font>
<font color="#009900">+index 1b20fef..0e58859 100644</font>
<font color="#009900">+--- a/src/pk-spawn.h</font>
<font color="#009900">++++ b/src/pk-spawn.h</font>
<font color="#009900">+@@ -52,7 +52,8 @@ GType                 pk_spawn_get_type                          (void) G_GNUC_CONST;</font>
<font color="#009900">+ PkSpawn                *pk_spawn_new                                (void);</font>
<font color="#009900">+ </font>
<font color="#009900">+ gboolean         pk_spawn_argv                                (PkSpawn        *spawn,</font>
<font color="#009900">+-                                                         gchar                **argv)</font>
<font color="#009900">++                                                         gchar                **argv,</font>
<font color="#009900">++                                                         gchar                **envp)</font>
<font color="#009900">+                                                          G_GNUC_WARN_UNUSED_RESULT;</font>
<font color="#009900">+ gboolean         pk_spawn_kill                                (PkSpawn        *spawn);</font>
<font color="#009900">+ </font>
============================================================
<font color="#FF6600">--- conf/distro/include/sane-srcrevs.inc        31946f0f79f0bc829893d6218a66ceb88a01c3b2</font>
<font color="#009900">+++ conf/distro/include/sane-srcrevs.inc        12ee6fdf6e7ea39bbac6764c1464c053eae524eb</font>
<font color="#0000FF">@@ -153,7 +153,7 @@ SRCREV_pn-oprofileui ?= "160"</font>
 SRCREV_pn-opkg-native ?= "4247"
 SRCREV_pn-opkg-sdk ?= "4247"
 SRCREV_pn-oprofileui ?= "160"
<font color="#FF6600">-SRCREV_pn-packagekit ?= "432046796fa420f57ab6c71081f7ba14e9a92574"</font>
<font color="#009900">+SRCREV_pn-packagekit ?= "ebbbfa191257861bd19bd47ba646dce590b51858"</font>
 SRCREV_pn-psplash ?= "249"
 SRCREV_pn-pty-forward-native ?= "4214"
 SRCREV_pn-py-odeviced ?= "190"
============================================================
<font color="#FF6600">--- packages/packagekit/packagekit_git.bb        d1b9bdd3d88e67835cab9f7b7bb6155fc89f2362</font>
<font color="#009900">+++ packages/packagekit/packagekit_git.bb        87d921eb998dab5f586a8f64d30c9921be03d5eb</font>
<font color="#0000FF">@@ -8,7 +8,8 @@ SRC_URI = "git://anongit.freedesktop.org</font>
 PR = "r8"
 
 SRC_URI = "git://anongit.freedesktop.org/git/packagekit;protocol=git \
<font color="#FF6600">-           file://disable-docbook2man.patch;patch=1"</font>
<font color="#009900">+           file://disable-docbook2man.patch;patch=1 \</font>
<font color="#009900">+           file://d1e096c3267c1c9492041382b954e9327bc8bbec.patch;patch=0"</font>
 
 S = "${WORKDIR}/git"
 
</tt></pre>