From a02570c1ce80a173563730880f35931d6cbccfcc Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 28 Oct 2008 21:30:11 +0100 Subject: hal_0.5.11: Move back to the hal directory and make it default for Openmoko hal 0.5.11 is fixing many, many, many memory leaks and is required if someone wants to have the device powered on for more than two days. I heavily encourage other distributions to switch as well. I can not see the autoreconf errors mentioned in koen's move a765a58dfd410eef8147e2e6ad1d0e4cef922c58 he is free to send them to me. I'm using tmp/staging/i686-linux/usr/bin/autoreconf --version autoreconf (GNU Autoconf) 2.61 --- conf/distro/include/preferred-om-2008-versions.inc | 2 +- packages/hal/hal_0.5.11.bb | 4 ++++ packages/nonworking/hal/hal_0.5.11.bb | 4 ---- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 packages/hal/hal_0.5.11.bb delete mode 100644 packages/nonworking/hal/hal_0.5.11.bb diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc index 3d3c3858e0..43bdc8f259 100644 --- a/conf/distro/include/preferred-om-2008-versions.inc +++ b/conf/distro/include/preferred-om-2008-versions.inc @@ -648,7 +648,7 @@ PREFERRED_VERSION_gvim ?= "7.0" PREFERRED_VERSION_gweled ?= "0.5" PREFERRED_VERSION_gxine ?= "0.4.1enhanced" PREFERRED_VERSION_gzip ?= "1.3.5" -PREFERRED_VERSION_hal ?= "0.5.9" +PREFERRED_VERSION_hal ?= "0.5.11" PREFERRED_VERSION_hal-info ?= "20080508" PREFERRED_VERSION_haserl ?= "0.8.0" PREFERRED_VERSION_havp ?= "0.86" diff --git a/packages/hal/hal_0.5.11.bb b/packages/hal/hal_0.5.11.bb new file mode 100644 index 0000000000..5408756510 --- /dev/null +++ b/packages/hal/hal_0.5.11.bb @@ -0,0 +1,4 @@ +require hal.inc + +SRC_URI += " file://hal-right-input-h.patch;patch=1" +EXTRA_OECONF += "--with-linux-input-header=${STAGING_INCDIR}/linux/input.h" diff --git a/packages/nonworking/hal/hal_0.5.11.bb b/packages/nonworking/hal/hal_0.5.11.bb deleted file mode 100644 index 5408756510..0000000000 --- a/packages/nonworking/hal/hal_0.5.11.bb +++ /dev/null @@ -1,4 +0,0 @@ -require hal.inc - -SRC_URI += " file://hal-right-input-h.patch;patch=1" -EXTRA_OECONF += "--with-linux-input-header=${STAGING_INCDIR}/linux/input.h" -- cgit v1.2.3 From 59fdade6ad1501f59761af8438cd5f80ec0015a4 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 22 Jul 2008 21:55:19 +0200 Subject: app-restarter: Add the little helper utility to relaunch X11 apps --- conf/distro/include/sane-srcrevs.inc | 1 + packages/openmoko-tools/app-restarter_svn.bb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 packages/openmoko-tools/app-restarter_svn.bb diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index da791ff4c5..8cc03b1744 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -14,6 +14,7 @@ SRCREV_pn-accelges ?= "206" SRCREV_pn-aircrack-ng ?= "802" SRCREV_pn-alsa-scenario ?= "633aaccc37f845146e490090dbd2a1ebb8064fd6" +SRCREV_pn-app-restarter ?= "4549" SRCREV_pn-assassin ?= "217" SRCREV_pn-assassin-thumbnail ?= "4513" SRCREV_pn-bfin-uclibc ?= "1857" diff --git a/packages/openmoko-tools/app-restarter_svn.bb b/packages/openmoko-tools/app-restarter_svn.bb new file mode 100644 index 0000000000..90ac2b1777 --- /dev/null +++ b/packages/openmoko-tools/app-restarter_svn.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "Small utility to restart a crashing application" +LICENSE = "GPL" + +SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=app_restarter;proto=http" +S = "${WORKDIR}/app_restarter" + +inherit pkgconfig + +do_compile() { + cd ${S} + oe_runmake +} + +do_install() { + install -d ${D}/${bindir} + install -m 0755 ${S}/app_restarter ${D}/${bindir}/${PN} +} -- cgit v1.2.3 From 7434683fdabb5cc28ef98e9b6aa1f0717ea32edd Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 23 Jul 2008 11:38:42 +0200 Subject: sane-srcrevs.inc: Upgrade app-restarter and fix the PV, bump the PE --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/openmoko-tools/app-restarter_svn.bb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 8cc03b1744..c7dc459cd4 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -14,7 +14,7 @@ SRCREV_pn-accelges ?= "206" SRCREV_pn-aircrack-ng ?= "802" SRCREV_pn-alsa-scenario ?= "633aaccc37f845146e490090dbd2a1ebb8064fd6" -SRCREV_pn-app-restarter ?= "4549" +SRCREV_pn-app-restarter ?= "4552" SRCREV_pn-assassin ?= "217" SRCREV_pn-assassin-thumbnail ?= "4513" SRCREV_pn-bfin-uclibc ?= "1857" diff --git a/packages/openmoko-tools/app-restarter_svn.bb b/packages/openmoko-tools/app-restarter_svn.bb index 90ac2b1777..c256b41e78 100644 --- a/packages/openmoko-tools/app-restarter_svn.bb +++ b/packages/openmoko-tools/app-restarter_svn.bb @@ -3,6 +3,8 @@ LICENSE = "GPL" SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=app_restarter;proto=http" S = "${WORKDIR}/app_restarter" +PV = "1.0+svn${SRCREV}" +PE = "1" inherit pkgconfig -- cgit v1.2.3 From 1bcbcaea6f28567a7c1b3c928fc256b5720e2da2 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 6 Aug 2008 02:29:49 +0200 Subject: app-restarter: Add X11 to the dependencies. --- packages/openmoko-tools/app-restarter_svn.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/openmoko-tools/app-restarter_svn.bb b/packages/openmoko-tools/app-restarter_svn.bb index c256b41e78..ea71a2533e 100644 --- a/packages/openmoko-tools/app-restarter_svn.bb +++ b/packages/openmoko-tools/app-restarter_svn.bb @@ -1,5 +1,6 @@ DESCRIPTION = "Small utility to restart a crashing application" LICENSE = "GPL" +DEPENDS = "virtual/libx11" SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=app_restarter;proto=http" S = "${WORKDIR}/app_restarter" -- cgit v1.2.3 From cae3aa1ba13e84dc8897111e16efc9d9ac58d6c8 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 27 Aug 2008 13:37:27 +0100 Subject: app-restarter: fix versions --- packages/openmoko-tools/app-restarter_svn.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openmoko-tools/app-restarter_svn.bb b/packages/openmoko-tools/app-restarter_svn.bb index ea71a2533e..61b68b5173 100644 --- a/packages/openmoko-tools/app-restarter_svn.bb +++ b/packages/openmoko-tools/app-restarter_svn.bb @@ -4,8 +4,8 @@ DEPENDS = "virtual/libx11" SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=app_restarter;proto=http" S = "${WORKDIR}/app_restarter" -PV = "1.0+svn${SRCREV}" -PE = "1" +PV = "1.0+svnr${SRCREV}" +PE = "2" inherit pkgconfig -- cgit v1.2.3 From 12e84f237f6340e2688415dba8bb3204021a38f3 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 6 Aug 2008 02:38:34 +0200 Subject: openmoko: Add a Gtk+ utility to set the root password This utility will be installable through the feed. --- conf/distro/include/sane-srcrevs.inc | 1 + .../openmoko-tools/openmoko-set-root-password.bb | 25 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 packages/openmoko-tools/openmoko-set-root-password.bb diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index c7dc459cd4..aa0f82322d 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -147,6 +147,7 @@ SRCREV_pn-openmoko-panel-memory ?= "3903" SRCREV_pn-openmoko-panel-usb ?= "3360" SRCREV_pn-openmoko-panel-wifi ?= "4344" SRCREV_pn-openmoko-sample2 ?= "3537" +SRCREV_pn-openmoko-set-root-password ?= "4590" SRCREV_pn-openmoko-sound-theme-standard2 ?= "4271" SRCREV_pn-openmoko-tasks2 ?= "399" SRCREV_pn-openmoko-terminal2 ?= "4726" diff --git a/packages/openmoko-tools/openmoko-set-root-password.bb b/packages/openmoko-tools/openmoko-set-root-password.bb new file mode 100644 index 0000000000..a521a1fd6d --- /dev/null +++ b/packages/openmoko-tools/openmoko-set-root-password.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "Set the root password." +SUMMARY = "On installation you will be prompted to set a root password. With \ +this password you can then log into the machine." +LICENSE = "GPL" +DEPENDS = "gtk+" +PKG_TAGS_${PN} = "group::programming" + +SRC_URI = "svn://svn.openmoko.org/developers/zecke/;module=root-password;proto=http" +S = "${WORKDIR}/root-password" +PV = "1.0+svn${SRCREV}" + +do_compile () { + cd ${S} + oe_runmake +} + +do_install() { + install -d ${D}/${sbindir} + install -m 0755 ${S}/root-password ${D}/${sbindir}/${PN} +} + +pkg_postinst_${PN} () { + # assume we use display 0 + DISPLAY=:0 ${sbindir}/${PN} +} -- cgit v1.2.3 From c5431547e51cd95e0746e9a7f7727cdb822dedb7 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 27 Aug 2008 13:37:43 +0100 Subject: openmoko-set-root-password: fix versions --- packages/openmoko-tools/openmoko-set-root-password.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/openmoko-tools/openmoko-set-root-password.bb b/packages/openmoko-tools/openmoko-set-root-password.bb index a521a1fd6d..f64c7031c1 100644 --- a/packages/openmoko-tools/openmoko-set-root-password.bb +++ b/packages/openmoko-tools/openmoko-set-root-password.bb @@ -7,7 +7,8 @@ PKG_TAGS_${PN} = "group::programming" SRC_URI = "svn://svn.openmoko.org/developers/zecke/;module=root-password;proto=http" S = "${WORKDIR}/root-password" -PV = "1.0+svn${SRCREV}" +PV = "1.0+svnr${SRCREV}" +PE = "1" do_compile () { cd ${S} -- cgit v1.2.3 From 078b0e63359b8dc61ab95e028b37d8668cdc1671 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Sun, 1 Jun 2008 19:17:58 +0200 Subject: xserver-nodm-init: Make sure to set a HOME and LOGNAME when launching Set a HOME and LOGNAME when none is being set. --- packages/xserver-kdrive-common/xserver-nodm-init.bb | 2 +- packages/xserver-kdrive-common/xserver-nodm-init/xserver-nodm | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/xserver-kdrive-common/xserver-nodm-init.bb b/packages/xserver-kdrive-common/xserver-nodm-init.bb index cea9f0cb28..bea21793a6 100644 --- a/packages/xserver-kdrive-common/xserver-nodm-init.bb +++ b/packages/xserver-kdrive-common/xserver-nodm-init.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Simple Xserver Init Script (no dm)" LICENSE = "GPL" SECTION = "x11" PRIORITY = "optional" -PR = "r8" +PR = "r9" SRC_URI = "file://xserver-nodm" S = ${WORKDIR} diff --git a/packages/xserver-kdrive-common/xserver-nodm-init/xserver-nodm b/packages/xserver-kdrive-common/xserver-nodm-init/xserver-nodm index a56edaa15b..2251c6aab2 100755 --- a/packages/xserver-kdrive-common/xserver-nodm-init/xserver-nodm +++ b/packages/xserver-kdrive-common/xserver-nodm-init/xserver-nodm @@ -24,6 +24,9 @@ case "$1" in $0 $1 background & else . /etc/profile + [ -z $LOGNAME ] && export LOGNAME=root && export HOME=/home/root + [ -z $HOME ] && export HOME=/home/$LOGNAME + echo "Starting Xserver" /etc/X11/Xserver & -- cgit v1.2.3 From cc8f1710d3078a49c44183f13b7118d3b73b9785 Mon Sep 17 00:00:00 2001 From: Julian_chu Date: Wed, 30 Jul 2008 16:07:53 +0800 Subject: apmd: Correct the .la file Apmd install the .la file but the content was wrong. It should remove the STAGING path. --- packages/apmd/apmd_3.2.2.bb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/apmd/apmd_3.2.2.bb b/packages/apmd/apmd_3.2.2.bb index 503f830bd9..471ee9ca10 100644 --- a/packages/apmd/apmd_3.2.2.bb +++ b/packages/apmd/apmd_3.2.2.bb @@ -3,7 +3,7 @@ SECTION = "base" PRIORITY = "required" DEPENDS = "libtool-cross" LICENSE = "GPL" -PR = "r11" +PR = "r11.01" SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.orig.tar.gz \ file://debian.patch;patch=1 \ @@ -55,6 +55,10 @@ do_install() { install -m 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/apmd oe_libinstall -so libapm ${D}${libdir} install -m 0644 apm.h ${D}${includedir} + for i in `find ${D} -name "*.la"` ; do \ + sed -i -e s:${STAGING_LIBDIR}:${libdir}:g $i + sed -i -e s:${STAGING_DIR_HOST}::g $i + done cat ${WORKDIR}/init | sed -e 's,/usr/sbin,${sbindir},g; s,/etc,${sysconfdir},g;' > ${D}${sysconfdir}/init.d/apmd chmod 755 ${D}${sysconfdir}/init.d/apmd -- cgit v1.2.3 From 294c894b7a89c8cc28098a0086fa2d9e8884361b Mon Sep 17 00:00:00 2001 From: John Lee Date: Wed, 3 Sep 2008 17:45:31 +0800 Subject: dropbear: improve dropbear security by listening only on usb0 by default trac #1853, originated by RuiSeabra --- packages/dropbear/dropbear.inc | 7 +++++++ packages/dropbear/dropbear/openmoko/default | 1 + packages/dropbear/dropbear_0.51.bb | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 packages/dropbear/dropbear/openmoko/default diff --git a/packages/dropbear/dropbear.inc b/packages/dropbear/dropbear.inc index 31edd26cc8..37ce47cba5 100644 --- a/packages/dropbear/dropbear.inc +++ b/packages/dropbear/dropbear.inc @@ -14,6 +14,9 @@ SRC_URI = "\ file://allow-nopw.patch \ file://init \ " +SRC_URI_append_openmoko = "\ + file://default \ +" inherit autotools update-rc.d @@ -56,6 +59,8 @@ do_install() { -e 's,/usr/bin,${bindir},g' \ -e 's,/usr,${prefix},g' > ${D}${sysconfdir}/init.d/dropbear chmod 755 ${D}${sysconfdir}/init.d/dropbear + test -e ${WORKDIR}/default && \ + install -m 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/dropbear } pkg_postinst () { @@ -73,3 +78,5 @@ pkg_postrm_append () { update-alternatives --remove ssh ${bindir}/dropbearmulti update-alternatives --remove scp ${bindir}/dropbearmulti } + +CONFFILES_${PN} += "${sysconfdir}/default/dropbear" diff --git a/packages/dropbear/dropbear/openmoko/default b/packages/dropbear/dropbear/openmoko/default new file mode 100644 index 0000000000..19816b32a6 --- /dev/null +++ b/packages/dropbear/dropbear/openmoko/default @@ -0,0 +1 @@ +DROPBEAR_PORT=`ip addr list usb0 | awk 'BEGIN { FS="[ /]+" } /inet / { print $3 }'`:22 diff --git a/packages/dropbear/dropbear_0.51.bb b/packages/dropbear/dropbear_0.51.bb index 888819c0e5..2566fbbd9b 100644 --- a/packages/dropbear/dropbear_0.51.bb +++ b/packages/dropbear/dropbear_0.51.bb @@ -1,4 +1,4 @@ require dropbear.inc -PR = "r1" +PR = "r1.01" -SRC_URI += "file://no-host-lookup.patch;patch=1" \ No newline at end of file +SRC_URI += "file://no-host-lookup.patch;patch=1" -- cgit v1.2.3 From 4688924045a881a3c1f5ae7cb6ec338f71de1e99 Mon Sep 17 00:00:00 2001 From: John Lee Date: Thu, 4 Sep 2008 14:38:20 +0800 Subject: dropbear: add /etc/default/dropbear in conffiles only on openmoko distro. thanks holger for pointing it out. --- packages/dropbear/dropbear.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dropbear/dropbear.inc b/packages/dropbear/dropbear.inc index 37ce47cba5..168cedbf8a 100644 --- a/packages/dropbear/dropbear.inc +++ b/packages/dropbear/dropbear.inc @@ -79,4 +79,4 @@ pkg_postrm_append () { update-alternatives --remove scp ${bindir}/dropbearmulti } -CONFFILES_${PN} += "${sysconfdir}/default/dropbear" +CONFFILES_${PN}_openmoko += "${sysconfdir}/default/dropbear" -- cgit v1.2.3 From 2f2fce10c427389f819a585fe938bec81f77eef6 Mon Sep 17 00:00:00 2001 From: Julian Chu Date: Mon, 19 May 2008 17:33:59 +0000 Subject: packagekit: Change revision of packagekit. To make it buildable, add a patch to it. In next time we update the packagekit version, this patch doesn't need anymore. ( it should enter in upstream) --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/packagekit/packagekit_git.bb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index aa0f82322d..dba50cb7b3 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -165,7 +165,7 @@ SRCREV_pn-opkg-sdk ?= "4640" SRCREV_pn-opkg-utils ?= "4534" SRCREV_pn-opkg-utils-native ?= "4534" SRCREV_pn-oprofileui ?= "173" -SRCREV_pn-packagekit ?= "813fa8cfb139246cf180d52895b52b28616ae2f5" +SRCREV_pn-packagekit ?= "ebbbfa191257861bd19bd47ba646dce590b51858" SRCREV_pn-portaudio-v19 ?= "1387" SRCREV_pn-psplash ?= "249" SRCREV_pn-pty-forward-native ?= "4214" diff --git a/packages/packagekit/packagekit_git.bb b/packages/packagekit/packagekit_git.bb index 8e2adff2cf..1d16560186 100644 --- a/packages/packagekit/packagekit_git.bb +++ b/packages/packagekit/packagekit_git.bb @@ -8,7 +8,8 @@ PV = "0.2.3+gitr${SRCREV}" PR = "r9" SRC_URI = "git://anongit.freedesktop.org/git/packagekit;protocol=git \ - file://disable-docbook2man.patch;patch=1" + file://disable-docbook2man.patch;patch=1 \ + file://d1e096c3267c1c9492041382b954e9327bc8bbec.patch;patch=0" S = "${WORKDIR}/git" -- cgit v1.2.3 From 3c2efdd0d3453bd42887895be26a9c76b7ae13f3 Mon Sep 17 00:00:00 2001 From: walkingice Date: Wed, 21 May 2008 14:53:04 +0800 Subject: Modify packagekit to make it patch successful --- packages/packagekit/packagekit_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/packagekit/packagekit_git.bb b/packages/packagekit/packagekit_git.bb index 1d16560186..ba8f99dc05 100644 --- a/packages/packagekit/packagekit_git.bb +++ b/packages/packagekit/packagekit_git.bb @@ -5,11 +5,11 @@ LICENSE = "GPL" DEPENDS = "dbus (>= 1.1.1) dbus-glib glib-2.0 sqlite3 opkg intltool intltool-native (>= 0.37.1)" RDEPENDS_${PN} = "opkg" PV = "0.2.3+gitr${SRCREV}" -PR = "r9" +PR = "r10" SRC_URI = "git://anongit.freedesktop.org/git/packagekit;protocol=git \ file://disable-docbook2man.patch;patch=1 \ - file://d1e096c3267c1c9492041382b954e9327bc8bbec.patch;patch=0" + file://d1e096c3267c1c9492041382b954e9327bc8bbec.patch;patch=1" S = "${WORKDIR}/git" -- cgit v1.2.3 From b8842ec5493a818e72e0dd8f2e22a998466037c9 Mon Sep 17 00:00:00 2001 From: Julian_chu Date: Mon, 2 Jun 2008 11:19:56 +0800 Subject: packagekit: Add 2 patched for packagekit. New stuff will be: * Added a new error enum to packagekit to support "corrupt-package" message. * Improve the error handling for update and install functions, with new opkg. --- ..._d1e096c3267c1c9492041382b954e9327bc8bbec.patch | 2938 ++++ ..._9ced8313fb12f0f89ad6ced7c0fdc7241ff00d77.patch | 13544 +++++++++++++++++++ .../d1e096c3267c1c9492041382b954e9327bc8bbec.patch | 2938 ---- packages/packagekit/packagekit_git.bb | 6 +- 4 files changed, 16486 insertions(+), 2940 deletions(-) create mode 100644 packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch create mode 100644 packages/packagekit/files/02_9ced8313fb12f0f89ad6ced7c0fdc7241ff00d77.patch delete mode 100644 packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch diff --git a/packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch b/packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch new file mode 100644 index 0000000000..f050a50002 --- /dev/null +++ b/packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch @@ -0,0 +1,2938 @@ +diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c +index 3270e42..45e7a44 100644 +--- a/backends/alpm/pk-backend-alpm.c ++++ b/backends/alpm/pk-backend-alpm.c +@@ -895,7 +895,7 @@ backend_get_repo_list (PkBackend *backend, PkFilterEnum filters) + static gboolean + backend_install_files_thread (PkBackend *backend) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + gchar **full_paths = pk_backend_get_strv (backend, "full_paths"); + +@@ -1050,7 +1050,7 @@ backend_install_packages (PkBackend *backend, gchar **package_ids) + static gboolean + backend_refresh_cache_thread (PkBackend *backend) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NOSCRIPTLET, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) { + pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerror (pm_errno)); +diff --git a/backends/apt/pk-apt-build-db.cpp b/backends/apt/pk-apt-build-db.cpp +index d47c348..885275d 100644 +--- a/backends/apt/pk-apt-build-db.cpp ++++ b/backends/apt/pk-apt-build-db.cpp +@@ -40,7 +40,7 @@ void apt_build_db(PkBackend * backend, sqlite3 *db) + sqlite3_stmt *package = NULL; + + pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates(backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + sdir = g_build_filename(_config->Find("Dir").c_str(),_config->Find("Dir::State").c_str(),_config->Find("Dir::State::lists").c_str(), NULL); + dir = g_dir_open(sdir,0,&error); +diff --git a/backends/apt/pk-sqlite-pkg-cache.cpp b/backends/apt/pk-sqlite-pkg-cache.cpp +index 770fcdf..1bf9a50 100644 +--- a/backends/apt/pk-sqlite-pkg-cache.cpp ++++ b/backends/apt/pk-sqlite-pkg-cache.cpp +@@ -81,7 +81,7 @@ sqlite_search_packages_thread (PkBackend *backend) + const gchar *search; + + pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates(backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + type = pk_backend_get_uint (backend, "type"); + search = pk_backend_get_string (backend, "search"); + +@@ -176,7 +176,7 @@ sqlite_get_details_thread (PkBackend *backend) + } + + pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates(backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + pk_debug("finding %s", pi->name); + +diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c +index b7b8167..9263781 100644 +--- a/backends/box/pk-backend-box.c ++++ b/backends/box/pk-backend-box.c +@@ -138,7 +138,7 @@ backend_find_packages_thread (PkBackend *backend) + filter_box = filter_box | PKG_SEARCH_DETAILS; + } + +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + db = db_open(); + +diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c +index 49d4e5a..2df445e 100644 +--- a/backends/dummy/pk-backend-dummy.c ++++ b/backends/dummy/pk-backend-dummy.c +@@ -254,7 +254,7 @@ static void + backend_get_updates (PkBackend *backend, PkFilterEnum filters) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + /* check network state */ + if (!pk_backend_is_online (backend)) { + pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot check when offline"); +@@ -268,6 +268,8 @@ static gboolean + backend_install_timeout (gpointer data) + { + PkBackend *backend = (PkBackend *) data; ++ guint sub_percent; ++ + if (_progress_percentage == 100) { + pk_backend_finished (backend); + return FALSE; +@@ -283,9 +285,18 @@ backend_install_timeout (gpointer data) + pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, + "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora", + "Devel files for gtkhtml"); ++ /* this duplicate package should be ignored */ ++ pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, ++ "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora", NULL); + pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL); + } +- _progress_percentage += 10; ++ if (_progress_percentage > 30 && _progress_percentage < 50) { ++ sub_percent = ((gfloat) (_progress_percentage - 30.0f) / 20.0f) * 100.0f; ++ pk_backend_set_sub_percentage (backend, sub_percent); ++ } else { ++ pk_backend_set_sub_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); ++ } ++ _progress_percentage += 1; + pk_backend_set_percentage (backend, _progress_percentage); + return TRUE; + } +@@ -348,7 +359,7 @@ backend_install_packages (PkBackend *backend, gchar **package_ids) + pk_backend_package (backend, PK_INFO_ENUM_DOWNLOADING, + "gtkhtml2;2.19.1-4.fc8;i386;fedora", + "An HTML widget for GTK+ 2.0"); +- _signal_timeout = g_timeout_add (1000, backend_install_timeout, backend); ++ _signal_timeout = g_timeout_add (100, backend_install_timeout, backend); + } + + /** +@@ -526,7 +537,7 @@ backend_search_name_timeout (gpointer data) + static void + backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_set_allow_cancel (backend, TRUE); + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); + _signal_timeout = g_timeout_add (2000, backend_search_name_timeout, backend); +diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c +index ecc97be..7649bab 100644 +--- a/backends/opkg/pk-backend-opkg.c ++++ b/backends/opkg/pk-backend-opkg.c +@@ -155,6 +155,38 @@ pk_opkg_progress_cb (opkg_t *opkg, const opkg_progress_data_t *pdata, void *data + return; + + pk_backend_set_percentage (backend, pdata->percentage); ++ if (pdata->package) ++ { ++ gchar *uid; ++ opkg_package_t *pkg = pdata->package; ++ gint status = PK_INFO_ENUM_UNKNOWN; ++ ++ uid = g_strdup_printf ("%s;%s;%s;", ++ pkg->name, pkg->version, pkg->architecture); ++ ++ if (pdata->action == OPKG_DOWNLOAD) ++ status = PK_INFO_ENUM_DOWNLOADING; ++ else if (pdata->action == OPKG_INSTALL) ++ status = PK_INFO_ENUM_INSTALLING; ++ else if (pdata->action == OPKG_REMOVE) ++ status = PK_INFO_ENUM_REMOVING; ++ ++ pk_backend_package (backend, status, uid, pkg->description); ++ g_free (uid); ++ } ++ ++ switch (pdata->action) ++ { ++ case OPKG_DOWNLOAD: ++ pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD); ++ break; ++ case OPKG_INSTALL: ++ pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL); ++ break; ++ case OPKG_REMOVE: ++ pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE); ++ break; ++ } + } + + static gboolean +@@ -163,8 +195,12 @@ backend_refresh_cache_thread (PkBackend *backend) + int ret; + + ret = opkg_update_package_lists (opkg, pk_opkg_progress_cb, backend); ++ + if (ret) { +- opkg_unknown_error (backend, ret, "Refreshing cache"); ++ if (ret == OPKG_DOWNLOAD_FAILED) ++ pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_AVAILABLE, NULL); ++ else ++ opkg_unknown_error (backend, ret, "Refreshing cache"); + } + pk_backend_finished (backend); + +@@ -178,7 +214,7 @@ static void + backend_refresh_cache (PkBackend *backend, gboolean force) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_REFRESH_CACHE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + + pk_backend_thread_create (backend, backend_refresh_cache_thread); +@@ -279,7 +315,7 @@ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *sear + + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + params = g_new0 (SearchParams, 1); + params->filters = filters; +@@ -301,7 +337,7 @@ backend_search_description (PkBackend *backend, PkFilterEnum filters, const gcha + + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + params = g_new0 (SearchParams, 1); + params->filters = filters; +@@ -320,7 +356,7 @@ backend_search_group (PkBackend *backend, PkFilterEnum filters, const gchar *sea + + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + params = g_new0 (SearchParams, 1); + params->filters = filters; +@@ -337,30 +373,52 @@ static gboolean + backend_install_packages_thread (PkBackend *backend) + { + PkPackageId *pi; +- gint err; +- const gchar *package_id; ++ gint err, i; ++ gchar **package_ids; + +- package_id = pk_backend_get_string (backend, "pkid"); +- pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_id, NULL); ++ package_ids = pk_backend_get_strv (backend, "pkids"); + +- pi = pk_package_id_new_from_string (package_id); ++ err = 0; ++ ++ for (i = 0; package_ids[i]; i++) ++ { ++ pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_ids[0], NULL); + +- err = opkg_install_package (opkg, pi->name, pk_opkg_progress_cb, backend); +- if (err != 0) +- opkg_unknown_error (backend, err, "Install"); ++ pi = pk_package_id_new_from_string (package_ids[0]); ++ ++ err = opkg_install_package (opkg, pi->name, pk_opkg_progress_cb, backend); ++ switch (err) ++ { ++ case OPKG_NO_ERROR: ++ break; ++ case OPKG_DEPENDANCIES_FAILED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, NULL); ++ break; ++ case OPKG_PACKAGE_ALREADY_INSTALLED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ALREADY_INSTALLED, NULL); ++ break; ++ case OPKG_PACKAGE_NOT_AVAILABLE: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL); ++ break; ++ default: ++ opkg_unknown_error (backend, err, "Install"); ++ } ++ pk_package_id_free (pi); ++ if (err != 0) ++ break; ++ } + +- pk_package_id_free (pi); + pk_backend_finished (backend); + return (err == 0); + } + + static void +-backend_install_packages (PkBackend *backend, gchar **package_id) ++backend_install_packages (PkBackend *backend, gchar **package_ids) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL); + +- pk_backend_set_string (backend, "pkid", package_id[0]); ++ pk_backend_set_strv (backend, "pkids", package_ids); + + pk_backend_thread_create (backend, backend_install_packages_thread); + } +@@ -369,7 +427,7 @@ static gboolean + backend_remove_packages_thread (PkBackend *backend) + { + PkPackageId *pi; +- gint err; ++ gint err, i; + gchar **package_ids; + gboolean allow_deps; + gboolean autoremove; +@@ -382,19 +440,34 @@ backend_remove_packages_thread (PkBackend *backend) + autoremove = GPOINTER_TO_INT (data[2]); + g_free (data); + +- pi = pk_package_id_new_from_string (package_ids[0]); +- pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[0], NULL); +- + opkg_set_option (opkg, "autoremove", &autoremove); + opkg_set_option (opkg, "force_removal_of_dependent_packages", &allow_deps); + +- err = opkg_remove_package (opkg, pi->name, pk_opkg_progress_cb, backend); ++ err = 0; + +- /* TODO: improve error reporting */ +- if (err != 0) +- opkg_unknown_error (backend, err, "Remove"); ++ for (i = 0; package_ids[i]; i++) ++ { ++ pi = pk_package_id_new_from_string (package_ids[0]); ++ pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[0], NULL); ++ ++ err = opkg_remove_package (opkg, pi->name, pk_opkg_progress_cb, backend); ++ ++ switch (err) ++ { ++ case OPKG_NO_ERROR: ++ break; ++ case OPKG_PACKAGE_NOT_INSTALLED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL); ++ break; ++ default: ++ opkg_unknown_error (backend, err, "Remove"); ++ } ++ pk_package_id_free (pi); ++ ++ if (err != 0) ++ break; ++ } + +- pk_package_id_free (pi); + pk_backend_finished (backend); + return (err == 0); + } +@@ -405,7 +478,7 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow + gpointer *params; + + pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + /* params is a small array we can pack our thread parameters into */ + params = g_new0 (gpointer, 2); +@@ -450,7 +523,7 @@ static void + backend_update_system (PkBackend *backend) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + pk_backend_thread_create (backend, backend_update_system_thread); + } +@@ -478,8 +551,14 @@ backend_update_package_thread (PkBackend *backend) + } + + err = opkg_upgrade_package (opkg, pi->name, pk_opkg_progress_cb, backend); +- +- if (err != 0) { ++ switch (err) ++ { ++ case OPKG_NO_ERROR: ++ break; ++ case OPKG_PACKAGE_NOT_INSTALLED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL); ++ break; ++ default: + opkg_unknown_error (backend, err, "Update package"); + } + +@@ -494,7 +573,7 @@ backend_update_packages (PkBackend *backend, gchar **package_ids) + gint i; + + pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + for (i = 0; package_ids[i]; i++) { + pk_backend_set_string (backend, "pkgid", package_ids[i]); +@@ -536,7 +615,7 @@ static void + backend_get_updates (PkBackend *backend, PkFilterEnum filters) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + pk_backend_thread_create (backend, backend_get_updates_thread); + } +@@ -572,19 +651,26 @@ backend_get_details_thread (PkBackend *backend) + if (pi == NULL) + { + pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id"); +- pk_package_id_free (pi); ++ pk_backend_finished (backend); + return FALSE; + } + + + pkg = opkg_find_package (opkg, pi->name, pi->version, pi->arch, pi->data); ++ pk_package_id_free (pi); ++ ++ if (!pkg) ++ { ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL); ++ pk_backend_finished (backend); ++ return FALSE; ++ } + + newid = g_strdup_printf ("%s;%s;%s;%s", pkg->name, pkg->version, pkg->architecture, pkg->repository); + + pk_backend_details (backend, newid, NULL, 0, pkg->description, pkg->url, pkg->size); + + g_free (newid); +- pk_package_id_free (pi); + pk_backend_finished (backend); + return TRUE; + } +@@ -592,7 +678,7 @@ backend_get_details_thread (PkBackend *backend) + static void + backend_get_details (PkBackend *backend, const gchar *package_id) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_thread_create (backend, backend_get_details_thread); + } + +diff --git a/backends/test/pk-backend-test-dbus.c b/backends/test/pk-backend-test-dbus.c +index 5dfea32..76686dc 100644 +--- a/backends/test/pk-backend-test-dbus.c ++++ b/backends/test/pk-backend-test-dbus.c +@@ -36,7 +36,7 @@ static void + backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search) + { + pk_backend_set_allow_cancel (backend, TRUE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_dbus_search_name (dbus, filters, search); + } + +diff --git a/backends/test/pk-backend-test-spawn.c b/backends/test/pk-backend-test-spawn.c +index 2958c05..584f44c 100644 +--- a/backends/test/pk-backend-test-spawn.c ++++ b/backends/test/pk-backend-test-spawn.c +@@ -35,7 +35,7 @@ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *sear + { + gchar *filters_text; + pk_backend_set_allow_cancel (backend, TRUE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + filters_text = pk_filter_enums_to_text (filters); + pk_backend_spawn_helper (spawn, "search-name.sh", filters_text, search, NULL); + g_free (filters_text); +diff --git a/backends/test/pk-backend-test-succeed.c b/backends/test/pk-backend-test-succeed.c +index 17cdc6e..c046c1d 100644 +--- a/backends/test/pk-backend-test-succeed.c ++++ b/backends/test/pk-backend-test-succeed.c +@@ -236,7 +236,7 @@ backend_search_name_timeout (gpointer data) + static void + backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + g_timeout_add (200000, backend_search_name_timeout, backend); + } + +diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py +index f76e27c..5b2da8f 100644 +--- a/backends/yum/helpers/yumBackend.py ++++ b/backends/yum/helpers/yumBackend.py +@@ -801,6 +801,8 @@ class PackageKitYumBackend(PackageKitBaseBackend): + old_throttle = self.yumbase.conf.throttle + self.yumbase.conf.throttle = "60%" # Set bandwidth throttle to 60% + # to avoid taking all the system's bandwidth. ++ old_skip_broken = self.yumbase.conf.skip_broken ++ self.yumbase.conf.skip_broken = 1 + + try: + txmbr = self.yumbase.update() # Add all updates to Transaction +@@ -812,6 +814,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + self.error(ERROR_NO_PACKAGES_TO_UPDATE,"Nothing to do") + + self.yumbase.conf.throttle = old_throttle ++ self.yumbase.conf.skip_broken = old_skip_broken + + def refresh_cache(self): + ''' +@@ -905,7 +908,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + if txmbrs: + self._runYumTransaction() + else: +- self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This package could not be installed as it is already installed") ++ self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package is already installed") + + def _checkForNewer(self,po): + pkgs = self.yumbase.pkgSack.returnNewestByName(name=po.name) +@@ -1003,7 +1006,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + return False + + if self._is_inst(po): +- self.error(ERROR_PACKAGE_ALREADY_INSTALLED, "%s is already installed" % str(po)) ++ self.error(ERROR_PACKAGE_ALREADY_INSTALLED, "The package %s is already installed" % str(po)) + return False + + if len(self.yumbase.conf.exclude) > 0: +diff --git a/backends/yum2/helpers/testyum2.py b/backends/yum2/helpers/testyum2.py +index cdec507..85b47f9 100755 +--- a/backends/yum2/helpers/testyum2.py ++++ b/backends/yum2/helpers/testyum2.py +@@ -80,7 +80,7 @@ try: + #iface.GetPackages(FILTER_INSTALLED,'no') + if cmd == 'get-repolist' or cmd == 'all': + print "Testing GetRepoList()" +- iface.GetRepoList() ++ iface.GetRepoList("") + if cmd == 'get-updatedetail' or cmd == 'all': + print "Testing GetUpdateDetail(PKG_ID)" + iface.GetUpdateDetail(PKG_ID) +diff --git a/backends/yum2/helpers/yumDBUSBackend.py b/backends/yum2/helpers/yumDBUSBackend.py +index 9cfed94..29f5b03 100755 +--- a/backends/yum2/helpers/yumDBUSBackend.py ++++ b/backends/yum2/helpers/yumDBUSBackend.py +@@ -434,7 +434,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + try: + pkgGroupDict = self._buildGroupDict() + fltlist = filters.split(';') +- found = {} ++ installed_nevra = [] # yum returns packages as available even when installed + + if not FILTER_NOT_INSTALLED in fltlist: + # Check installed for group +@@ -450,21 +450,31 @@ class PackageKitYumBackend(PackageKitBaseBackend): + group = groupMap[cg] # use the pk group name, instead of yum 'category/group' + if group == key: + if self._do_extra_filtering(pkg, fltlist): +- self._show_package(pkg, INFO_INSTALLED) ++ package_list.append((pkg,INFO_INSTALLED)) ++ installed_nevra.append(self._get_nevra(pkg)) ++ + if not FILTER_INSTALLED in fltlist: + # Check available for group + for pkg in self.yumbase.pkgSack: + if self._cancel_check("Search cancelled."): + # _cancel_check() sets the error message, unlocks yum, and calls Finished() + return +- group = GROUP_OTHER +- if pkgGroupDict.has_key(pkg.name): +- cg = pkgGroupDict[pkg.name] +- if groupMap.has_key(cg): +- group = groupMap[cg] +- if group == key: +- if self._do_extra_filtering(pkg, fltlist): +- self._show_package(pkg, INFO_AVAILABLE) ++ ++ nevra = self._get_nevra(pkg) ++ if nevra not in installed_nevra: ++ group = GROUP_OTHER ++ if pkgGroupDict.has_key(pkg.name): ++ cg = pkgGroupDict[pkg.name] ++ if groupMap.has_key(cg): ++ group = groupMap[cg] ++ if group == key: ++ if self._do_extra_filtering(pkg, fltlist): ++ package_list.append((pkg,INFO_AVAILABLE)) ++ ++ except yum.Errors.GroupsError,e: ++ self._unlock_yum() ++ self.ErrorCode(ERROR_GROUP_NOT_FOUND, str(e)) ++ self.Finished(EXIT_FAILED) + except yum.Errors.RepoError,e: + self.Message(MESSAGE_NOTICE, "The package cache is invalid and is being rebuilt.") + self._refresh_yum_cache() +@@ -473,6 +483,14 @@ class PackageKitYumBackend(PackageKitBaseBackend): + + return + ++ # basename filter if specified ++ if FILTER_BASENAME in fltlist: ++ for (pkg,status) in self._basename_filter(package_list): ++ self._show_package(pkg,status) ++ else: ++ for (pkg,status) in package_list: ++ self._show_package(pkg,status) ++ + self._unlock_yum() + self.Finished(EXIT_SUCCESS) + +@@ -724,6 +742,11 @@ class PackageKitYumBackend(PackageKitBaseBackend): + #we might have a rounding error + self.PercentageChanged(100) + ++ except yum.Errors.RepoError,e: ++ self._unlock_yum() ++ self.ErrorCode(ERROR_REPO_CONFIGURATION_ERROR,str(e)) ++ self.Finished(EXIT_FAILED) ++ self.Exit() + except yum.Errors.YumBaseError, e: + self._unlock_yum() + # This should be a better-defined error, but I'm not sure +@@ -837,6 +860,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + Needed to be implemented in a sub class + ''' + if inst_file.endswith('.src.rpm'): ++ self._unlock_yum() + self.ErrorCode(ERROR_CANNOT_INSTALL_SOURCE_PACKAGE,'Backend will not install a src rpm file') + self.Finished(EXIT_FAILED) + return +@@ -1385,30 +1409,30 @@ class PackageKitYumBackend(PackageKitBaseBackend): + res = self.yumbase.searchGenerator(searchlist, [key]) + fltlist = filters.split(';') + +- available = [] +- count = 1 ++ seen_nevra = [] # yum returns packages as available even when installed ++ pkg_list = [] # only do the second iteration on not installed pkgs ++ package_list = [] #we can't do emitting as found if we are post-processing ++ + for (pkg,values) in res: + if self._cancel_check("Search cancelled."): + return False + # are we installed? + if pkg.repo.id == 'installed': +- if FILTER_NOT_INSTALLED not in fltlist: +- if self._do_extra_filtering(pkg,fltlist): +- count+=1 +- if count > 100: +- break +- self._show_package(pkg, INFO_INSTALLED) ++ if self._do_extra_filtering(pkg,fltlist): ++ package_list.append((pkg,INFO_INSTALLED)) ++ seen_nevra.append(self._get_nevra(pkg)) + else: +- available.append(pkg) ++ pkg_list.append(pkg) + +- # Now show available packages. +- if FILTER_INSTALLED not in fltlist: +- for pkg in available: +- if self._cancel_check("Search cancelled."): +- return False +- if self._do_extra_filtering(pkg,fltlist): +- self._show_package(pkg, INFO_AVAILABLE) ++ for pkg in pkg_list: ++ if self._cancel_check("Search cancelled."): ++ return False + ++ nevra = self._get_nevra(pkg) ++ if nevra not in seen_nevra: ++ if self._do_extra_filtering(pkg,fltlist): ++ package_list.append((pkg,INFO_AVAILABLE)) ++ seen_nevra.append(self._get_nevra(pkg)) + except yum.Errors.RepoError,e: + self.Message(MESSAGE_NOTICE, "The package cache is invalid and is being rebuilt.") + self._refresh_yum_cache() +@@ -1417,13 +1441,22 @@ class PackageKitYumBackend(PackageKitBaseBackend): + + return False + ++ # basename filter if specified ++ if FILTER_BASENAME in fltlist: ++ for (pkg,status) in self._basename_filter(package_list): ++ self._show_package(pkg,status) ++ else: ++ for (pkg,status) in package_list: ++ self._show_package(pkg,status) ++ + return True + + def _do_extra_filtering(self,pkg,filterList): + ''' do extra filtering (gui,devel etc) ''' + for filter in filterList: + if filter in (FILTER_INSTALLED, FILTER_NOT_INSTALLED): +- continue ++ if not self._do_installed_filtering(filter,pkg): ++ return False + elif filter in (FILTER_GUI, FILTER_NOT_GUI): + if not self._do_gui_filtering(filter, pkg): + return False +@@ -1433,11 +1466,17 @@ class PackageKitYumBackend(PackageKitBaseBackend): + elif filter in (FILTER_FREE, FILTER_NOT_FREE): + if not self._do_free_filtering(filter, pkg): + return False +- elif filter in (FILTER_BASENAME, FILTER_NOT_BASENAME): +- if not self._do_basename_filtering(filter, pkg): +- return False + return True + ++ def _do_installed_filtering(self,flt,pkg): ++ isInstalled = False ++ if flt == FILTER_INSTALLED: ++ wantInstalled = True ++ else: ++ wantInstalled = False ++ isInstalled = pkg.repo.id == 'installed' ++ return isInstalled == wantInstalled ++ + def _do_gui_filtering(self,flt,pkg): + isGUI = False + if flt == FILTER_GUI: +@@ -1477,32 +1516,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + + return isFree == wantFree + +- def _do_basename_filtering(self,flt,pkg): +- if flt == FILTER_BASENAME: +- wantBase = True +- else: +- wantBase = False +- +- isBase = self._check_basename(pkg) +- +- return isBase == wantBase + +- def _check_basename(self, pkg): +- ''' +- If a package does not have a source rpm (If that ever +- happens), or it does have a source RPM, and the package's name +- is the same as the source RPM's name, then we assume it is the +- 'base' package. +- ''' +- basename = pkg.name +- +- if pkg.sourcerpm: +- basename = rpmUtils.miscutils.splitFilename(pkg.sourcerpm)[0] +- +- if basename == pkg.name: +- return True +- +- return False + + def _is_development_repo(self, repo): + if repo.endswith('-debuginfo'): +@@ -1576,28 +1590,41 @@ class PackageKitYumBackend(PackageKitBaseBackend): + ''' + find a package based on a package id (name;version;arch;repoid) + ''' +- # Split up the id +- (n,idver,a,d) = self.get_package_from_id(id) +- # get e,v,r from package id version +- e,v,r = self._getEVR(idver) ++ # is this an real id or just an name ++ if len(id.split(';')) > 1: ++ # Split up the id ++ (n,idver,a,d) = self.get_package_from_id(id) ++ # get e,v,r from package id version ++ e,v,r = self._getEVR(idver) ++ else: ++ n = id ++ e = v = r = a = None + # search the rpmdb for the nevra + pkgs = self.yumbase.rpmdb.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a) +- # if the package is found, then return it ++ # if the package is found, then return it (do not have to match the repo_id) + if len(pkgs) != 0: + return pkgs[0],True + # search the pkgSack for the nevra +- pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a) +- # if the package is found, then return it +- if len(pkgs) != 0: +- return pkgs[0],False +- else: ++ try: ++ pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a) ++ except yum.Errors.RepoError,e: ++ self.error(ERROR_REPO_NOT_AVAILABLE,str(e)) ++ # nothing found ++ if len(pkgs) == 0: + return None,False ++ # one NEVRA in a single repo ++ if len(pkgs) == 1: ++ return pkgs[0],False ++ # we might have the same NEVRA in multiple repos, match by repo name ++ for pkg in pkgs: ++ if d == pkg.repoid: ++ return pkg,False ++ # repo id did not match ++ return None,False + + def _is_inst(self,pkg): + return self.yumbase.rpmdb.installed(po=pkg) + +- +- + def _installable(self, pkg, ematch=False): + + """check if the package is reasonably installable, true/false""" +@@ -1764,6 +1791,57 @@ class PackageKitYumBackend(PackageKitBaseBackend): + return INFO_ENHANCEMENT + else: + return INFO_UNKNOWN ++ def _is_main_package(self,repo): ++ if repo.endswith('-debuginfo'): ++ return False ++ if repo.endswith('-devel'): ++ return False ++ if repo.endswith('-libs'): ++ return False ++ return True ++ ++ def _basename_filter(self,package_list): ++ ''' ++ Filter the list so that the number of packages are reduced. ++ This is done by only displaying gtk2 rather than gtk2-devel, gtk2-debuginfo, etc. ++ This imlementation is done by comparing the SRPM name, and if not falling back ++ to the first entry. ++ We have to fall back else we don't emit packages where the SRPM does not produce a ++ RPM with the same name, for instance, mono produces mono-core, mono-data and mono-winforms. ++ @package_list: a (pkg,status) list of packages ++ A new list is returned that has been filtered ++ ''' ++ base_list = [] ++ output_list = [] ++ base_list_already_got = [] ++ ++ #find out the srpm name and add to a new array of compound data ++ for (pkg,status) in package_list: ++ if pkg.sourcerpm: ++ base = rpmUtils.miscutils.splitFilename(pkg.sourcerpm)[0] ++ base_list.append ((pkg,status,base,pkg.version)); ++ else: ++ base_list.append ((pkg,status,'nosrpm',pkg.version)); ++ ++ #find all the packages that match thier basename name (done seporately so we get the "best" match) ++ for (pkg,status,base,version) in base_list: ++ if base == pkg.name and (base,version) not in base_list_already_got: ++ output_list.append((pkg,status)) ++ base_list_already_got.append ((base,version)) ++ ++ #for all the ones not yet got, can we match against a non devel match? ++ for (pkg,status,base,version) in base_list: ++ if (base,version) not in base_list_already_got: ++ if self._is_main_package(pkg.name): ++ output_list.append((pkg,status)) ++ base_list_already_got.append ((base,version)) ++ ++ #add the remainder of the packages, which should just be the single debuginfo's ++ for (pkg,status,base,version) in base_list: ++ if (base,version) not in base_list_already_got: ++ output_list.append((pkg,status)) ++ base_list_already_got.append ((base,version)) ++ return output_list + + def _get_obsoleted(self,name): + obsoletes = self.yumbase.up.getObsoletesTuples( newest=1 ) +diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp +index 746da82..15c4b4f 100644 +--- a/backends/zypp/pk-backend-zypp.cpp ++++ b/backends/zypp/pk-backend-zypp.cpp +@@ -1170,7 +1170,7 @@ backend_find_packages_thread (PkBackend *backend) + mode = pk_backend_get_uint (backend, "mode"); + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + std::vector *v = new std::vector; + std::vector *v2 = new std::vector; +diff --git a/client/pk-console.c b/client/pk-console.c +index 8f69068..5a05a8e 100644 +--- a/client/pk-console.c ++++ b/client/pk-console.c +@@ -50,7 +50,7 @@ static gboolean awaiting_space = FALSE; + static gboolean trusted = TRUE; + static guint timer_id = 0; + static guint percentage_last = 0; +-static gchar *filename = NULL; ++static gchar **files_cache = NULL; + static PkControl *control = NULL; + static PkClient *client = NULL; + static PkClient *client_task = NULL; +@@ -494,6 +494,12 @@ pk_console_perhaps_resolve (PkClient *client, PkFilterEnum filter, const gchar * + return g_strdup (package); + } + ++ ret = pk_client_reset (client_task, error); ++ if (ret == FALSE) { ++ pk_warning ("failed to reset client task"); ++ return NULL; ++ } ++ + /* we need to resolve it */ + ret = pk_client_resolve (client_task, filter, package, error); + if (ret == FALSE) { +@@ -549,20 +555,93 @@ pk_console_perhaps_resolve (PkClient *client, PkFilterEnum filter, const gchar * + } + + /** +- * pk_console_install_package: ++ * pk_console_install_stuff: + **/ + static gboolean +-pk_console_install_package (PkClient *client, const gchar *package, GError **error) ++pk_console_install_stuff (PkClient *client, gchar **packages, GError **error) + { +- gboolean ret; +- gchar *package_id; +- package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_NOT_INSTALLED, package, error); +- if (package_id == NULL) { +- g_print ("%s\n", _("Could not find a package with that name to install, or package already installed")); +- return FALSE; ++ gboolean ret = TRUE; ++ gboolean is_local; ++ gchar *package_id = NULL; ++ gchar **package_ids = NULL; ++ gchar **files = NULL; ++ guint i; ++ guint length; ++ GPtrArray *array_packages; ++ GPtrArray *array_files; ++ ++ array_packages = g_ptr_array_new (); ++ array_files = g_ptr_array_new (); ++ length = g_strv_length (packages); ++ for (i=2; ilen > 0) { ++ /* convert to strv */ ++ package_ids = pk_ptr_array_to_argv (array_packages); ++ ++ /* reset */ ++ ret = pk_client_reset (client, error); ++ if (!ret) { ++ pk_warning ("failed to reset"); ++ goto out; ++ } ++ ++ ret = pk_client_install_package (client, package_id, error); ++ if (!ret) { ++ pk_warning ("failed to install packages"); ++ goto out; ++ } ++ } ++ ++ /* any to process? */ ++ if (array_files->len > 0) { ++ /* convert to strv */ ++ files = pk_ptr_array_to_argv (array_files); ++ ++ /* save for untrusted callback */ ++ g_strfreev (files_cache); ++ files_cache = g_strdupv (files); ++ ++ /* reset */ ++ ret = pk_client_reset (client, error); ++ if (!ret) { ++ pk_warning ("failed to reset"); ++ goto out; ++ } ++ ++ ret = pk_client_install_files (client, trusted, files, error); ++ if (!ret) { ++ pk_warning ("failed to install files"); ++ goto out; ++ } ++ } ++ ++out: ++ g_strfreev (package_ids); ++ g_strfreev (files); ++ g_ptr_array_free (array_files, TRUE); ++ g_ptr_array_free (array_packages, TRUE); + return ret; + } + +@@ -570,16 +649,16 @@ pk_console_install_package (PkClient *client, const gchar *package, GError **err + * pk_console_remove_only: + **/ + static gboolean +-pk_console_remove_only (PkClient *client, const gchar *package_id, gboolean force, gboolean autoremove, GError **error) ++pk_console_remove_only (PkClient *client, gchar **package_ids, gboolean force, GError **error) + { + gboolean ret; + +- pk_debug ("remove %s", package_id); ++ pk_debug ("remove+ %s", package_ids[0]); + ret = pk_client_reset (client, error); + if (!ret) { + return ret; + } +- return pk_client_remove_package (client, package_id, force, autoremove, error); ++ return pk_client_remove_packages (client, package_ids, force, FALSE, error); + } + + /** +@@ -625,64 +704,99 @@ pk_console_get_prompt (const gchar *question, gboolean defaultyes) + } + + /** +- * pk_console_remove_package: ++ * pk_console_remove_packages: + **/ + static gboolean +-pk_console_remove_package (PkClient *client, const gchar *package, GError **error) ++pk_console_remove_packages (PkClient *client, gchar **packages, GError **error) + { + gchar *package_id; +- gboolean ret; +- guint length; ++ gboolean ret = TRUE; + PkPackageItem *item; + PkPackageId *ident; +- guint i; ++ guint i, j; ++ guint size; ++ guint length; + gboolean remove; ++ GPtrArray *array; ++ gchar **package_ids = NULL; ++ PkPackageList *list; ++ ++ array = g_ptr_array_new (); ++ list = pk_package_list_new (); ++ length = g_strv_length (packages); ++ for (i=2; ipackage_id); + g_print ("%i\t%s-%s\n", i, ident->name, ident->version); + pk_package_id_free (ident); +@@ -694,14 +808,17 @@ pk_console_remove_package (PkClient *client, const gchar *package, GError **erro + /* we chickened out */ + if (remove == FALSE) { + g_print ("%s\n", _("Cancelled!")); +- g_free (package_id); +- return FALSE; ++ ret = FALSE; ++ goto out; + } + + /* remove all the stuff */ +- ret = pk_console_remove_only (client, package_id, TRUE, FALSE, error); +- g_free (package_id); ++ ret = pk_console_remove_only (client, package_ids, TRUE, error); + ++out: ++ g_object_unref (list); ++ g_strfreev (package_ids); ++ g_ptr_array_free (array, TRUE); + return ret; + } + +@@ -840,7 +957,7 @@ pk_console_error_code_cb (PkClient *client, PkErrorCodeEnum error_code, const gc + error_code == PK_ERROR_ENUM_MISSING_GPG_SIGNATURE && trusted) { + pk_debug ("need to try again with trusted FALSE"); + trusted = FALSE; +- ret = pk_client_install_file (client_install_files, trusted, filename, &error); ++ ret = pk_client_install_files (client_install_files, trusted, files_cache, &error); + /* we succeeded, so wait for the requeue */ + if (!ret) { + pk_warning ("failed to install file second time: %s", error->message); +@@ -1153,7 +1270,6 @@ main (int argc, char *argv[]) + const gchar *value = NULL; + const gchar *details = NULL; + const gchar *parameter = NULL; +- PkRoleEnum roles; + PkGroupEnum groups; + gchar *text; + ret = FALSE; +@@ -1324,15 +1440,7 @@ main (int argc, char *argv[]) + g_print (_("You need to specify a package or file to install")); + goto out; + } +- /* is it a local file? */ +- ret = g_file_test (value, G_FILE_TEST_EXISTS); +- if (ret) { +- ret = pk_client_install_file (client, trusted, value, &error); +- /* we need this for the untrusted try */ +- filename = g_strdup (value); +- } else { +- ret = pk_console_install_package (client, value, &error); +- } ++ ret = pk_console_install_stuff (client, argv, &error); + + } else if (strcmp (mode, "install-sig") == 0) { + if (value == NULL || details == NULL || parameter == NULL) { +@@ -1346,7 +1454,7 @@ main (int argc, char *argv[