summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorJulian_chu <julian_chu@openmoko.com>2008-06-02 11:19:56 +0800
committerHolger Hans Peter Freyther <zecke@selfish.org>2008-10-28 22:48:50 +0100
commitb8842ec5493a818e72e0dd8f2e22a998466037c9 (patch)
tree4ede5d69d7442086045b9b15e9f64e28b25ea618 /packages
parent3c2efdd0d3453bd42887895be26a9c76b7ae13f3 (diff)
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.
Diffstat (limited to 'packages')
-rw-r--r--packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch (renamed from packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch)0
-rw-r--r--packages/packagekit/files/02_9ced8313fb12f0f89ad6ced7c0fdc7241ff00d77.patch13544
-rw-r--r--packages/packagekit/packagekit_git.bb6
3 files changed, 13548 insertions, 2 deletions
diff --git a/packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch b/packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch
index f050a50002..f050a50002 100644
--- a/packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch
+++ b/packages/packagekit/files/01_d1e096c3267c1c9492041382b954e9327bc8bbec.patch
diff --git a/packages/packagekit/files/02_9ced8313fb12f0f89ad6ced7c0fdc7241ff00d77.patch b/packages/packagekit/files/02_9ced8313fb12f0f89ad6ced7c0fdc7241ff00d77.patch
new file mode 100644
index 0000000000..fb617c5eda
--- /dev/null
+++ b/packages/packagekit/files/02_9ced8313fb12f0f89ad6ced7c0fdc7241ff00d77.patch
@@ -0,0 +1,13544 @@
+:000000 100644 0000000... bd0cc2e... A RELEASE
+:100644 100644 fcc8347... 20279b3... M backends/Makefile.am
+:000000 100644 0000000... c851833... A backends/apt.deprecated/.gitignore
+:000000 100644 0000000... 07b4131... A backends/apt.deprecated/Makefile.am
+:000000 100644 0000000... 0d20b64... A backends/apt.deprecated/helpers/.gitignore
+:000000 100644 0000000... 0299df2... A backends/apt.deprecated/helpers/Makefile.am
+:000000 100644 0000000... e5f78ca... A backends/apt.deprecated/helpers/aptBackend.py
+:000000 100755 0000000... 94dca4a... A backends/apt.deprecated/helpers/get-depends.py
+:000000 100755 0000000... a813640... A backends/apt.deprecated/helpers/get-details.py
+:000000 100755 0000000... 5529f72... A backends/apt.deprecated/helpers/get-repo-list.py
+:000000 100755 0000000... e581010... A backends/apt.deprecated/helpers/get-requires.py
+:000000 100755 0000000... 5524d9a... A backends/apt.deprecated/helpers/get-update-detail.py
+:000000 100755 0000000... 4f45fbf... A backends/apt.deprecated/helpers/get-updates.py
+:000000 100755 0000000... dfa024c... A backends/apt.deprecated/helpers/install-files.py
+:000000 120000 0000000... 8d22531... A backends/apt.deprecated/helpers/packagekit
+:000000 100755 0000000... 881479d... A backends/apt.deprecated/helpers/refresh-cache.py
+:000000 100755 0000000... 3cc36ae... A backends/apt.deprecated/helpers/repo-enable.py
+:000000 100755 0000000... aac34df... A backends/apt.deprecated/helpers/resolve.py
+:000000 100755 0000000... d02f1b0... A backends/apt.deprecated/helpers/search-details.py
+:000000 100755 0000000... ec60319... A backends/apt.deprecated/helpers/search-file.py
+:000000 100755 0000000... f63ee80... A backends/apt.deprecated/helpers/search-group.py
+:000000 100755 0000000... 9f73c89... A backends/apt.deprecated/helpers/search-name.py
+:000000 100644 0000000... 885275d... A backends/apt.deprecated/pk-apt-build-db.cpp
+:000000 100644 0000000... bb786a9... A backends/apt.deprecated/pk-apt-build-db.h
+:000000 100644 0000000... 5e5b4e5... A backends/apt.deprecated/pk-apt-search-plain.c
+:000000 100644 0000000... 98bdc7f... A backends/apt.deprecated/pk-apt-search-sqlite.cpp
+:000000 100644 0000000... e36e89f... A backends/apt.deprecated/pk-apt-search.h
+:000000 100644 0000000... f59cd88... A backends/apt.deprecated/pk-backend-apt.c
+:000000 100644 0000000... 1bf9a50... A backends/apt.deprecated/pk-sqlite-pkg-cache.cpp
+:000000 100644 0000000... 68fad42... A backends/apt.deprecated/pk-sqlite-pkg-cache.h
+:000000 100644 0000000... 2b99c5d... A backends/apt/HACKING
+:100644 100644 07b4131... e315ba9... M backends/apt/Makefile.am
+:000000 100644 0000000... 0a3da6e... A backends/apt/README
+:000000 100644 0000000... bee2f3d... A backends/apt/TODO
+:000000 100755 0000000... 22eb714... A backends/apt/aptDBUSBackend.py
+:100644 000000 0d20b64... 0000000... D backends/apt/helpers/.gitignore
+:100644 000000 0299df2... 0000000... D backends/apt/helpers/Makefile.am
+:100644 000000 e5f78ca... 0000000... D backends/apt/helpers/aptBackend.py
+:100755 000000 94dca4a... 0000000... D backends/apt/helpers/get-depends.py
+:100755 000000 a813640... 0000000... D backends/apt/helpers/get-details.py
+:100755 000000 5529f72... 0000000... D backends/apt/helpers/get-repo-list.py
+:100755 000000 e581010... 0000000... D backends/apt/helpers/get-requires.py
+:100755 000000 5524d9a... 0000000... D backends/apt/helpers/get-update-detail.py
+:100755 000000 4f45fbf... 0000000... D backends/apt/helpers/get-updates.py
+:100755 000000 dfa024c... 0000000... D backends/apt/helpers/install-files.py
+:100755 000000 881479d... 0000000... D backends/apt/helpers/refresh-cache.py
+:100755 000000 3cc36ae... 0000000... D backends/apt/helpers/repo-enable.py
+:100755 000000 aac34df... 0000000... D backends/apt/helpers/resolve.py
+:100755 000000 d02f1b0... 0000000... D backends/apt/helpers/search-details.py
+:100755 000000 ec60319... 0000000... D backends/apt/helpers/search-file.py
+:100755 000000 f63ee80... 0000000... D backends/apt/helpers/search-group.py
+:100755 000000 9f73c89... 0000000... D backends/apt/helpers/search-name.py
+:000000 120000 0000000... 0b64032... A backends/apt/packagekit
+:100644 000000 885275d... 0000000... D backends/apt/pk-apt-build-db.cpp
+:100644 000000 bb786a9... 0000000... D backends/apt/pk-apt-build-db.h
+:100644 000000 5e5b4e5... 0000000... D backends/apt/pk-apt-search-plain.c
+:100644 000000 98bdc7f... 0000000... D backends/apt/pk-apt-search-sqlite.cpp
+:100644 000000 e36e89f... 0000000... D backends/apt/pk-apt-search.h
+:100644 100644 f59cd88... 70836b2... M backends/apt/pk-backend-apt.c
+:100644 000000 1bf9a50... 0000000... D backends/apt/pk-sqlite-pkg-cache.cpp
+:100644 000000 68fad42... 0000000... D backends/apt/pk-sqlite-pkg-cache.h
+:000000 100644 0000000... 1b5d30f... A backends/apt/profiler.py
+:000000 100755 0000000... a1d5ffb... A backends/apt/test.py
+:100644 000000 c851833... 0000000... D backends/apt2/.gitignore
+:100644 000000 2b99c5d... 0000000... D backends/apt2/HACKING
+:100644 000000 91c0c46... 0000000... D backends/apt2/Makefile.am
+:100644 000000 0a3da6e... 0000000... D backends/apt2/README
+:100644 000000 bee2f3d... 0000000... D backends/apt2/TODO
+:100755 000000 b7fc500... 0000000... D backends/apt2/aptDBUSBackend.py
+:120000 000000 0b64032... 0000000... D backends/apt2/packagekit
+:100644 000000 4f78ec4... 0000000... D backends/apt2/pk-backend-apt2.c
+:100644 000000 1b5d30f... 0000000... D backends/apt2/profiler.py
+:100755 000000 a1d5ffb... 0000000... D backends/apt2/test.py
+:100644 100644 2df445e... 5714e9f... M backends/dummy/pk-backend-dummy.c
+:100644 100644 7649bab... 2d70108... M backends/opkg/pk-backend-opkg.c
+:100644 100644 fdc99d3... 2691414... M backends/poldek/pk-backend-poldek.c
+:000000 100644 0000000... 996fb0d... A backends/urpmi/.gitignore
+:000000 100644 0000000... 56743a1... A backends/urpmi/Makefile.am
+:000000 100644 0000000... 2f78cf5... A backends/urpmi/helpers/.gitignore
+:000000 100644 0000000... 88f144e... A backends/urpmi/helpers/Makefile.am
+:000000 100755 0000000... bf936c5... A backends/urpmi/helpers/get-depends.pl
+:000000 100755 0000000... 3207e9b... A backends/urpmi/helpers/get-details.pl
+:000000 100755 0000000... 74ae157... A backends/urpmi/helpers/get-files.pl
+:000000 100755 0000000... 9e3e525... A backends/urpmi/helpers/get-packages.pl
+:000000 100755 0000000... 0012b2a... A backends/urpmi/helpers/get-requires.pl
+:000000 100755 0000000... 69ea452... A backends/urpmi/helpers/get-update-detail.pl
+:000000 100755 0000000... 02d574c... A backends/urpmi/helpers/get-updates.pl
+:000000 100755 0000000... c9cf6c8... A backends/urpmi/helpers/install-packages.pl
+:000000 100644 0000000... 6ed63b5... A backends/urpmi/helpers/perl_packagekit/Makefile.am
+:000000 100644 0000000... 8dbb4b0... A backends/urpmi/helpers/perl_packagekit/enums.pm
+:000000 100644 0000000... 7411ca9... A backends/urpmi/helpers/perl_packagekit/prints.pm
+:000000 100755 0000000... 555a8b8... A backends/urpmi/helpers/refresh-cache.pl
+:000000 100755 0000000... 3be38ea... A backends/urpmi/helpers/remove-packages.pl
+:000000 100755 0000000... 32e0866... A backends/urpmi/helpers/resolve.pl
+:000000 100755 0000000... 3081abe... A backends/urpmi/helpers/search-details.pl
+:000000 100755 0000000... 03d348e... A backends/urpmi/helpers/search-file.pl
+:000000 100755 0000000... e5b7b92... A backends/urpmi/helpers/search-group.pl
+:000000 100755 0000000... 383921f... A backends/urpmi/helpers/search-name.pl
+:000000 100755 0000000... 88274bc... A backends/urpmi/helpers/update-packages.pl
+:000000 100644 0000000... 3eb8280... A backends/urpmi/helpers/urpmi_backend/Makefile.am
+:000000 100644 0000000... a01b893... A backends/urpmi/helpers/urpmi_backend/actions.pm
+:000000 100644 0000000... 2c2f13a... A backends/urpmi/helpers/urpmi_backend/filters.pm
+:000000 100644 0000000... d377ab2... A backends/urpmi/helpers/urpmi_backend/groups.pm
+:000000 100644 0000000... 795edc6... A backends/urpmi/helpers/urpmi_backend/open_db.pm
+:000000 100644 0000000... e078134... A backends/urpmi/helpers/urpmi_backend/tools.pm
+:000000 100644 0000000... e7b56a7... A backends/urpmi/pk-backend-urpmi.c
+:100644 100644 5b2da8f... d70d8dc... M backends/yum/helpers/yumBackend.py
+:100755 100755 29f5b03... a708a0c... M backends/yum2/helpers/yumDBUSBackend.py
+:100644 100644 15c4b4f... a971707... M backends/zypp/pk-backend-zypp.cpp
+:100644 100644 2b848f0... d81d0dd... M backends/zypp/zypp-utils.cpp
+:100644 100644 9e3bad1... 4f785cf... M backends/zypp/zypp-utils.h
+:100644 100644 5a05a8e... ec93978... M client/pk-console.c
+:100644 100644 f5be0a5... bfe364f... M client/pk-import-desktop.c
+:100644 100644 cf14cc2... bffd45b... M client/pk-import-specspo.c
+:100644 100644 f614d2b... 7510b03... M configure.ac
+:100644 100644 4d4a7e3... 61a67d1... M contrib/PackageKit.spec.in
+:100644 100644 a97fc3b... ded7799... M contrib/gnome-packagekit.spec.in
+:100644 100644 607a7a4... 7aa298b... M docs/html/pk-authors.html
+:100644 100644 0cdc85c... d276a05... M docs/html/pk-download.html
+:100644 100644 efa8344... 3e37cc1... M docs/html/pk-faq.html
+:100644 100644 0b75b10... 51a165a... M docs/spec/pk-concepts.xml
+:100644 100644 a79e647... 2970dda... M docs/spec/pk-signals.xml
+:100644 100644 8f9bd57... 7a48320... M etc/PackageKit.conf.in
+:100644 100644 dd2387b... 8fb82f1... M libpackagekit/pk-client.c
+:100644 100644 2b1d1a2... 6617159... M libpackagekit/pk-client.h
+:100644 100644 9d3cff7... 0be0e6e... M libpackagekit/pk-common.c
+:100644 100644 9908ec2... 9e5a05e... M libpackagekit/pk-common.h
+:100644 100644 f2de5ae... 5a54ccc... M libpackagekit/pk-control.c
+:100644 100644 63b30d3... c1b1be8... M libpackagekit/pk-control.h
+:100644 100644 5743dcb... 9dccdd0... M libpackagekit/pk-enum.c
+:100644 100644 e616b64... 4cc317e... M libpackagekit/pk-enum.h
+:100644 100644 7f01a4c... d0f0776... M libpackagekit/pk-extra.c
+:100644 100644 87905dc... ff4bd4e... M libpackagekit/pk-package-item.c
+:100644 100644 5d95e1b... 6bdb0d4... M libpackagekit/pk-package-list.c
+:100644 100644 9734af4... 83901ab... M libpackagekit/pk-package-list.h
+:100644 100644 dceb656... 7308a29... M libpackagekit/pk-polkit-client.c
+:100644 100644 76ab022... 3dc1db0... M libpackagekit/pk-task-list.c
+:100644 100644 6dbee0e... f87e6b3... M po/LINGUAS
+:100644 100644 33d30c1... 6e8013e... M po/de.po
+:000000 100644 0000000... ea732d0... A po/hu.po
+:100644 100644 32efce7... 4c4607d... M policy/org.freedesktop.packagekit.policy.in
+:100644 100644 5253b39... 9fd627a... M python/packagekit/daemonBackend.py
+:100644 100644 f9c9f12... 2bd416d... M src/pk-backend-spawn.c
+:100644 100644 37ed024... f0f245f... M src/pk-backend.c
+:100644 100644 fb17e3c... a7ba754... M src/pk-backend.h
+:100644 100644 028a0d0... 14ecf41... M src/pk-engine.c
+:100644 100644 c59b1f3... 668451f... M src/pk-engine.h
+:100644 100644 e9e74e1... 7290bbe... M src/pk-interface.xml
+:100644 100644 9abf992... 81332d0... M src/pk-security-polkit.c
+:100644 100644 3432095... eb55932... M src/pk-security.h
+:100644 100644 7aa183f... d42bc7a... M src/pk-transaction-db.c
+:100644 100644 0921c7c... f325f94... M src/pk-transaction-list.c
+:100644 100644 07ffdee... 15faed3... M src/pk-transaction.c
+:100755 100755 f78c891... 6521e69... M tools/add-error-enum.sh
+:100755 000000 ebbd8f7... 0000000... D tools/rpmbuild.sh
+
+diff --git a/RELEASE b/RELEASE
+new file mode 100644
+index 0000000..bd0cc2e
+--- /dev/null
++++ b/RELEASE
+@@ -0,0 +1,50 @@
++PackageKit Release Notes
++
++1. Write NEWS entries for PackageKit and gnome-packagekit in the same
++ format as usual. Ignore any trivial commits.
++
++$git-shortlog GNOME_PACKAGEKIT_0_2_1.. | grep -v trivial > NEWS.new
++
++2. Add download date to docs/html/pk-download.html, save file.
++
++3. Update library version if new ABI in configure.ac and change DEVELOPMENT_RELEASE if needed
++
++4. Commit changes in PackageKit git:
++
++$git commit -a -m "Release version 0.2.2"
++$git tag -a -f -m "Release 0.2.2" PACKAGEKIT_0_2_2
++$git push --tags
++$git push
++
++5. Commit changes in gnome-packagekit git:
++
++$git commit -a -m "Release version 0.2.2"
++$git-tag GNOME_PACKAGEKIT_0_2_2
++$git push --tags
++$git push
++
++6. Upload both tarballs to:
++
++$scp *.tar.gz packagekit.org/srv/www/html/releases/
++
++7. Do post release version bump in configure.ac
++
++8. Commit changes in both projects:
++
++$git commit -a -m "post release version bump"
++$git push
++
++9. Send an email to packagekit@lists.freedesktop.org
++
++=================================================
++Subject: PackageKit and gnome-packagekit 0.2.2 released!
++
++Today I released PackageKit and gnome-packagekit 0.2.2.
++
++PackageKit release notes: http://gitweb.freedesktop.org/?p=packagekit.git;a=blob;f=NEWS
++gnome-packagekit release notes: http://gitweb.freedesktop.org/?p=users/hughsient/gnome-packagekit.git;a=blob;f=NEWS
++
++Tarballs available here: http://people.freedesktop.org/~hughsient/releases/
++Thanks to all those who made this possible.
++=================================================
++
+diff --git a/backends/Makefile.am b/backends/Makefile.am
+index fcc8347..20279b3 100644
+--- a/backends/Makefile.am
++++ b/backends/Makefile.am
+@@ -8,10 +8,6 @@ if BACKEND_TYPE_APT
+ SUBDIRS += apt
+ endif
+
+-if BACKEND_TYPE_APT_DBUS
+-SUBDIRS += apt2
+-endif
+-
+ if BACKEND_TYPE_BOX
+ SUBDIRS += box
+ endif
+@@ -32,6 +28,10 @@ if BACKEND_TYPE_SMART
+ SUBDIRS += smart
+ endif
+
++if BACKEND_TYPE_URPMI
++SUBDIRS += urpmi
++endif
++
+ if BACKEND_TYPE_YUM
+ SUBDIRS += yum
+ endif
+diff --git a/backends/apt.deprecated/.gitignore b/backends/apt.deprecated/.gitignore
+new file mode 100644
+index 0000000..c851833
+--- /dev/null
++++ b/backends/apt.deprecated/.gitignore
+@@ -0,0 +1,10 @@
++.deps
++.libs
++Makefile
++Makefile.in
++*.la
++*.lo
++*.loT
++*.o
++*~
++
+diff --git a/backends/apt.deprecated/Makefile.am b/backends/apt.deprecated/Makefile.am
+new file mode 100644
+index 0000000..07b4131
+--- /dev/null
++++ b/backends/apt.deprecated/Makefile.am
+@@ -0,0 +1,30 @@
++NULL =
++
++SUBDIRS = helpers
++plugindir = $(PK_PLUGIN_DIR)
++plugin_LTLIBRARIES = libpk_backend_apt.la
++
++libpk_backend_apt_la_LIBADD = $(PK_PLUGIN_LIBS)
++libpk_backend_apt_la_LDFLAGS = -module -avoid-version $(APT_LIBS)
++libpk_backend_apt_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(APT_CFLAGS)
++libpk_backend_apt_la_CXXFLAGS = $(PK_PLUGIN_CFLAGS) $(APT_CFLAGS) -DPK_DB_DIR=\""$(PK_DB_DIR)"\"
++
++libpk_backend_apt_la_SOURCES = \
++ pk-backend-apt.c \
++ pk-apt-search.h \
++ $(NULL)
++
++if APT_SEARCH_PLAIN
++libpk_backend_apt_la_SOURCES += \
++ pk-apt-search-plain.c \
++ $(NULL)
++endif
++
++if APT_SEARCH_SQLITE
++libpk_backend_apt_la_SOURCES += \
++ pk-sqlite-pkg-cache.h \
++ pk-sqlite-pkg-cache.cpp \
++ pk-apt-build-db.cpp \
++ pk-apt-search-sqlite.cpp \
++ $(NULL)
++endif
+diff --git a/backends/apt.deprecated/helpers/.gitignore b/backends/apt.deprecated/helpers/.gitignore
+new file mode 100644
+index 0000000..0d20b64
+--- /dev/null
++++ b/backends/apt.deprecated/helpers/.gitignore
+@@ -0,0 +1 @@
++*.pyc
+diff --git a/backends/apt.deprecated/helpers/Makefile.am b/backends/apt.deprecated/helpers/Makefile.am
+new file mode 100644
+index 0000000..0299df2
+--- /dev/null
++++ b/backends/apt.deprecated/helpers/Makefile.am
+@@ -0,0 +1,29 @@
++
++helperdir = $(datadir)/PackageKit/helpers/apt
++
++NULL =
++
++dist_helper_DATA = \
++ install-files.py \
++ search-name.py \
++ search-details.py \
++ search-group.py \
++ search-file.py \
++ get-depends.py \
++ get-details.py \
++ get-repo-list.py \
++ get-requires.py \
++ get-update-detail.py \
++ get-updates.py \
++ refresh-cache.py \
++ repo-enable.py \
++ resolve.py \
++ aptBackend.py \
++ $(NULL)
++
++install-data-hook:
++ chmod a+rx $(DESTDIR)$(helperdir)/*.py
++
++clean-local :
++ rm -f *~
++
+diff --git a/backends/apt.deprecated/helpers/aptBackend.py b/backends/apt.deprecated/helpers/aptBackend.py
+new file mode 100644
+index 0000000..e5f78ca
+--- /dev/null
++++ b/backends/apt.deprecated/helpers/aptBackend.py
+@@ -0,0 +1,536 @@
++#
++# vim: ts=4 et sts=4
++#
++# Copyright (C) 2007 Ali Sabil <ali.sabil@gmail.com>
++# Copyright (C) 2007 Tom Parker <palfrey@tevp.net>
++#
++# Licensed under the GNU General Public License Version 2
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++
++import sys
++import os
++import re
++
++from packagekit.backend import *
++import apt_pkg,apt_inst
++
++import warnings
++warnings.filterwarnings(action='ignore', category=FutureWarning)
++import apt
++from aptsources.distro import get_distro
++from aptsources.sourceslist import SourcesList
++from sets import Set
++from os.path import join,exists
++from urlparse import urlparse
++from apt.debfile import DebPackage
++from os import system
++
++class Package(apt.Package):
++ def __str__(self):
++ return "Package %s, version %s"%(self.name,self._version)
++
++ def _cmp_deps(self,deps, version):
++ for (v,c) in deps:
++ if not apt_pkg.CheckDep(version,c,v):
++ return False
++ return True
++
++ def __init__(self, backend, pkg, data="",version=[]):
++ apt.package.Package.__init__(self, pkg._cache, pkg._depcache,
++ pkg._records, pkg._list, pkg._pcache,
++ pkg._pkg)
++ self._version = version
++ self._data = data
++ self._backend = backend
++ wanted_ver = None
++ if self.installedVersion!=None and self._cmp_deps(version,self.installedVersion):
++ wanted_ver = self.installedVersion
++ elif self.installedVersion == None and version == []:
++ #self.markInstall(False,False)
++ wanted_ver = self.candidateVersion
++
++ for ver in pkg._pkg.VersionList:
++ #print "vers",dir(ver),version,ver
++ #print data
++ if (wanted_ver == None or wanted_ver == ver.VerStr) and self._cmp_deps(version,ver.VerStr):
++ f, index = ver.FileList.pop(0)
++ if self._data == "":
++ if f.Origin=="" and f.Archive=="now":
++ self._data = "local_install"
++ elif f.Origin!="" or f.Archive!="":
++ self._data = "%s/%s"%(f.Origin.replace("/","_"),f.Archive.replace("/","_"))
++ else:
++ self._data = "%s/unknown"%f.Site
++ self._version = ver.VerStr
++ break
++ else:
++ print "wanted",wanted_ver
++ for ver in pkg._pkg.VersionList:
++ print "vers",version,ver.VerStr
++ backend.error(ERROR_PACKAGE_NOT_FOUND, "Can't find version %s for %s"%(version,self.name))
++
++ def setVersion(self,version,compare="="):
++ if version!=None and (self.installedVersion == None or not apt_pkg.CheckDep(version,compare,self.installedVersion)):
++ self.markInstall(False,False)
++ if self.candidateVersion != version:
++ if self._data == "":
++ for ver in pkg._pkg.VersionList:
++ f, index = ver.FileList.pop(0)
++ self._data = "%s/%s"%(f.Origin,f.Archive)
++ if ver.VerStr == version:
++ break
++
++ # FIXME: this is a nasty hack, assuming that the best way to resolve
++ # deps for non-default repos is by switching the default release.
++ # We really need a better resolver (but that's hard)
++ assert self._data!=""
++ origin = self._data[self._data.find("/")+1:]
++ print "origin",origin
++ name = self.name
++ apt_pkg.Config.Set("APT::Default-Release",origin)
++ if not self._backend._caches.has_key(origin):
++ self._backend._caches[origin] = apt.Cache(PackageKitProgress(self))
++ print "new cache for %s"%origin
++ self.__setParent(self._backend._caches[origin][name])
++ self.markInstall(False,False)
++ if not apt_pkg.CheckDep(self.candidateVersion,compare,version):
++ self._backend.error(ERROR_PACKAGE_NOT_FOUND,
++ "Unable to locate package version %s (only got %s) for %s"%(version,self.candidateVersion,name))
++ return
++ self.markKeep()
++
++ @property
++ def group(self):
++ section = self.section.split('/')[-1].lower()
++ #if section in ():
++ # return GROUP_ACCESSIBILITY
++ if section in ('utils',):
++ return "accessories"
++ #if section in ():
++ # return GROUP_EDUCATION
++ if section in ('games',):
++ return "games"
++ if section in ('graphics',):
++ return "graphics"
++ if section in ('net', 'news', 'web', 'comm'):
++ return "internet"
++ if section in ('editors', 'tex'):
++ return "office"
++ if section in ('misc',):
++ return "other"
++ if section in ('devel', 'libdevel', 'interpreters', 'perl', 'python'):
++ return "programming"
++ if section in ('sound',):
++ return "multimedia"
++ if section in ('base', 'admin'):
++ return "system"
++ return "unknown"
++
++ @property
++ def isInstalled(self):
++ return super(self.__class__,self).isInstalled and self.installedVersion == self._version
++
++ @property
++ def isDevelopment(self):
++ name = self.name.lower()
++ section = self.section.split('/')[-1].lower()
++ return name.endswith('-dev') or name.endswith('-dbg') or \
++ section in ('devel', 'libdevel')
++
++ @property
++ def isGui(self):
++ section = self.section.split('/')[-1].lower()
++ return section in ('x11', 'gnome', 'kde')
++
++ _HYPHEN_PATTERN = re.compile(r'(\s|_)+')
++
++ def matchName(self, name):
++ needle = name.strip().lower()
++ haystack = self.name.lower()
++ needle = Package._HYPHEN_PATTERN.sub('-', needle)
++ haystack = Package._HYPHEN_PATTERN.sub('-', haystack)
++ if haystack.find(needle) >= 0:
++ return True
++ return False
++
++ def matchDetails(self, details):
++ if self.matchName(details):
++ return True
++ needle = details.strip().lower()
++ haystack = self.description.lower()
++ if haystack.find(needle) >= 0:
++ return True
++ return False
++
++ def matchGroup(self, name):
++ needle = name.strip().lower()
++ haystack = self.group
++ if haystack.startswith(needle):
++ return True
++ return False
++
++class PackageKitProgress(apt.progress.OpProgress, apt.progress.FetchProgress):
++ def __init__(self, backend):
++ self._backend = backend
++ apt.progress.OpProgress.__init__(self)
++ apt.progress.FetchProgress.__init__(self)
++
++ # OpProgress callbacks
++ def update(self, percent):
++ pass
++
++ def done(self):
++ pass
++
++ # FetchProgress callbacks
++ def pulse(self):
++ apt.progress.FetchProgress.pulse(self)
++ self._backend.percentage(self.percent)
++ return True
++
++ def stop(self):
++ self._backend.percentage(100)
++
++ def mediaChange(self, medium, drive):
++ # This probably should not be an error, but a Message.
++ self._backend.error(ERROR_UNKNOWN,
++ "Medium change needed")
++
++class PackageKitAptBackend(PackageKitBaseBackend):
++ def __init__(self, args):
++ PackageKitBaseBackend.__init__(self, args)
++ self.status(STATUS_SETUP)
++ self._caches = {}
++ self._apt_cache = apt.Cache(PackageKitProgress(self))
++ default = apt_pkg.Config.Find("APT::Default-Release")
++ if default=="":
++ d = get_distro()
++ if d.id == "Debian":
++ default = "stable"
++ elif d.id == "Ubuntu":
++ default = "main"
++ else:
++ raise Exception,d.id
++
++ self._caches[default] = self._apt_cache
++
++
++ def search_name(self, filters, key):
++ '''
++ Implement the {backend}-search-name functionality
++ '''
++ self.status(STATUS_INFO)
++ self.allow_cancel(True)
++ for package in self._do_search(filters,
++ lambda pkg: pkg.matchName(key)):
++ self._emit_package(package)
++
++ def search_details(self, filters, key):
++ '''
++ Implement the {backend}-search-details functionality
++ '''
++ self.status(STATUS_INFO)
++ self.allow_cancel(True)
++ for package in self._do_search(filters,
++ lambda pkg: pkg.matchDetails(key)):
++ self._emit_package(package)
++
++ def search_group(self, filters, key):
++ '''
++ Implement the {backend}-search-group functionality
++ '''
++ self.status(STATUS_INFO)
++ self.allow_cancel(True)
++ for package in self._do_search(filters,
++ lambda pkg: pkg.matchGroup(key)):
++ self._emit_package(package)
++
++ def search_file(self, filters, key):
++ '''
++ Implement the {backend}-search-file functionality
++ '''
++ self.allow_cancel(True)
++ self.percentage(None)
++
++ self.error(ERROR_NOT_SUPPORTED,
++ "This function is not implemented in this backend")
++
++ def refresh_cache(self):
++ '''
++ Implement the {backend}-refresh_cache functionality
++ '''
++ self.status(STATUS_REFRESH_CACHE)
++ try:
++ res = self._apt_cache.update(PackageKitProgress(self))
++ except Exception, error_message:
++ self.error(ERROR_UNKNOWN,
++ "Failed to fetch the following items:\n%s" % error_message)
++ return res
++
++ def get_details(self, package):
++ '''
++ Implement the {backend}-get-details functionality
++ '''
++ self.status(STATUS_INFO)
++ name, version, arch, data = self.get_package_from_id(package)
++ pkg = Package(self, self._apt_cache[name])
++ description = re.sub('\s+', ' ', pkg.description).strip()
++ self.description(package, 'unknown', pkg.group, description,
++ pkg.architecture, pkg.packageSize)
++
++ def resolve(self, name):
++ '''
++ Implement the {backend}-resolve functionality
++ '''
++ self.status(STATUS_INFO)
++ try:
++ pkg = Package(self,self._apt_cache[name])
++ self._emit_package(pkg)
++ except KeyError:
++ self.error(ERROR_PACKAGE_NOT_FOUND,"Can't find a package called '%s'"%name)
++
++ def _do_deps(self,inp,deps,recursive):
++ inp.markInstall()
++ newkeys = []
++ for x in inp.candidateDependencies:
++ n = x.or_dependencies[0].name
++ if not deps.has_key(n):
++ deps[n] = []
++ newkeys.append(n)
++ deps[n].append((x.or_dependencies[0].version,x.or_dependencies[0].relation))
++ if recursive:
++ for n in newkeys:
++ try:
++ deps = self._do_deps(Package(self,self._apt_cache[n],version=deps[n]),deps,recursive)
++ except KeyError: # FIXME: we're assuming this is a virtual package, which we can't cope with yet
++ del deps[n]
++ continue
++ return deps
++
++ def get_depends(self,filters,package, recursive):
++ '''
++ Implement the {backend}-get-depends functionality
++ '''
++ self.allow_cancel(True)
++ self.status(STATUS_INFO)
++ recursive = (recursive == "True")
++ name, version, arch, data = self.get_package_from_id(package)
++ pkg = Package(self,self._apt_cache[name],version=[(version,"=")],data=data)
++ pkg.setVersion(version)
++ deps = self._do_deps(pkg, {}, recursive)
++ for n in deps.keys():
++ self._emit_package(Package(self,self._apt_cache[n],version=deps[n]))
++
++ def _do_reqs(self,inp,pkgs,recursive):
++ extra = []
++ fails = []
++ for r in inp._pkg.RevDependsList:
++ ch = apt_pkg.CheckDep(inp._version,r.CompType,r.TargetVer)
++ v = (r.ParentPkg.Name,r.ParentVer.VerStr)
++ if not ch or v in fails:
++ #print "skip",r.TargetVer,r.CompType,r.ParentPkg.Name,r.ParentVer.VerStr
++ fails.append(v)
++ continue
++ p = Package(self,self._apt_cache[r.ParentPkg.Name],r.ParentVer.VerStr)
++ if v not in pkgs:
++ extra.append(p)
++ #print "new pkg",p
++ self._emit_package(p)
++ pkgs.add(v)
++ if recursive:
++ for e in extra:
++ pkgs = self._do_reqs(p, pkgs,recursive)
++ return pkgs
++
++ def get_requires(self,package,recursive):
++ '''
++ Implement the {backend}-get-requires functionality
++ '''
++ self.allow_cancel(True)
++ self.status(STATUS_INFO)
++ recursive = (recursive == "True")
++ name, version, arch, data = self.get_package_from_id(package)
++ pkg = Package(self,self._apt_cache[name], version=[(version,"=")], data=data)
++
++ pkgs = Set()
++ self._do_reqs(pkg,pkgs, recursive)
++
++ def _build_repo_list(self):
++ repo = {}
++
++ sources = SourcesList()
++ repo["__sources"] = sources
++
++ root = apt_pkg.Config.FindDir("Dir::State::Lists")
++ #print root
++ for entry in sources:
++ if entry.type!="":
++ url = entry.uri
++ #if entry.template!=None:
++ url +="/dists/"
++ url += entry.dist
++ url = url.replace("//dists","/dists")
++ #print url
++ path = join(root,"%s_Release"%(apt_pkg.URItoFileName(url)))
++ if not exists(path):
++ #print path
++ name = "%s/unknown"%urlparse(entry.uri)[1]
++ else:
++ lines = file(path).readlines()
++ origin = ""
++ suite = ""
++ for l in lines:
++ if l.find("Origin: ")==0:
++ origin = l.split(" ",1)[1].strip()
++ elif l.find("Suite: ")==0:
++ suite = l.split(" ",1)[1].strip()
++ assert origin!="" and suite!=""
++ name = "%s/%s"%(origin,suite)
++ if entry.type == "deb-src":
++ name += "-src"
++
++ repo[name] = {"entry":entry}
++ return repo
++
++ def get_repo_list(self, filters):
++ '''
++ Implement the {backend}-get-repo-list functionality
++ '''
++ self.allow_interrupt(True)
++ self.status(STATUS_INFO)
++ repo = self._build_repo_list()
++ for e in repo.keys():
++ if e == "__sources":
++ continue
++ self.repo_detail(repo[e]["entry"].line.strip(),e,not repo[e]["entry"].disabled)
++
++ def repo_enable(self, repoid, enable):
++ '''
++ Implement the {backend}-repo-enable functionality
++ '''
++ enable = (enable == "True")
++ repo = self._build_repo_list()
++ if not repo.has_key(repoid):
++ self.error(ERROR_REPO_NOT_FOUND,"Couldn't find repo '%s'"%repoid)
++ return
++ r = repo[repoid]
++ if not r["entry"].disabled == enable: # already there
++ return
++ r["entry"].set_enabled(enable)
++ try:
++ repo["__sources"].save()
++ except IOError,e:
++ self.error(ERROR_UNKNOWN, "Problem while trying to save repo settings to %s: %s"%(e.filename,e.strerror))
++
++ def get_updates(self, filter):
++ self._apt_cache.upgrade(False)
++ for pkg in self._apt_cache.getChanges():
++ self._emit_package(Package(self, pkg))
++
++ def get_update_detail(self, package):
++ self.allow_cancel(True)
++ self.percentage(None)
++ self.status(STATUS_INFO)
++ name, version, arch, data = self.get_package_from_id(package)
++ update = ""
++ obsolete = ""
++ cve_url = ""
++ bz_url = ""
++ vendor_url = ""
++ reboot = "none"
++ desc = self._apt_cache[name].description
++ self.update_detail(package,update,obsolete,vendor_url,bz_url,cve_url,reboot,desc)
++
++
++ def install_files (self, inst_files):
++ '''
++ Implement the {backend}-install_files functionality
++ Install the package containing the inst_file file
++ '''
++ if not exists(inst_file):
++ self.error(ERROR_PACKAGE_NOT_FOUND,"Can't find %s"%inst_file)
++ return
++ deb = DebPackage(inst_file)
++ deps = {}
++ for k in ["Depends","Recommends"]:
++ if not deb._sections.has_key(k):
++ continue
++ for items in apt_pkg.ParseDepends(deb[k]):
++ assert len(items) == 1,"Can't handle or deps properly yet"
++ (pkg,ver,comp) = items[0]
++ if not deps.has_key(pkg):
++ deps[pkg] = []
++ deps[pkg].append((ver,comp))
++ for n in deps.keys():
++ p = Package(self,self._apt_cache[n],version=deps[n])
++ if not p.isInstalled:
++ p.markInstall()
++ assert self._apt_cache.getChanges()==[],"Don't handle install changes yet"
++ # FIXME: nasty hack. Need a better way in
++ ret = system("dpkg -i %s"%inst_file)
++ if ret!=0:
++ self.error(ERROR_UNKNOWN,"Can't install package")
++
++ ### Helpers ###
++ def _emit_package(self, package):
++ id = self.get_package_id(package.name,
++ package._version,
++ package.architecture,
++ package._data)
++ if package.isInstalled:
++ status = INFO_INSTALLED
++ else:
++ status = INFO_AVAILABLE
++ summary = package.summary
++ self.package(id, status, summary)
++
++ def _do_search(self, filters, condition):
++ filters = filters.split(';')
++ size = len(self._apt_cache)
++ percentage = 0
++ for i, pkg in enumerate(self._apt_cache):
++ new_percentage = i / float(size) * 100
++ if new_percentage - percentage >= 5:
++ percentage = new_percentage
++ self.percentage(percentage)
++ package = Package(self, pkg)
++ if package.installedVersion is None and \
++ package.candidateVersion is None:
++ continue
++ if not condition(package):
++ continue
++ continue
++ vers = [x.VerStr for x in package._pkg.VersionList]
++ if package.installedVersion!=None:
++ i = package.installedVersion
++ if i in vers and vers[0]!=i:
++ del vers[vers.index(i)]
++ vers.insert(0,i)
++
++ for ver in vers:
++ p = Package(self, package, version=[[ver,"="]])
++ if self._do_filtering(p, filters):
++ yield p
++ self.percentage(100)
++
++ def _do_filtering(self, package, filters):
++ if len(filters) == 0 or filters == ['none']:
++ return True
++ if (FILTER_INSTALLED in filters) and (not package.isInstalled):
++ return False
++ if (FILTER_NOT_INSTALLED in filters) and package.isInstalled:
++ return False
++ if (FILTER_GUI in filters) and (not package.isGui):
++ return False
++ if (FILTER_NOT_GUI in filters) and package.isGui:
++