diff options
| author | Julian_chu <julian_chu@openmoko.com> | 2008-06-02 11:19:56 +0800 |
|---|---|---|
| committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2008-10-28 22:48:50 +0100 |
| commit | b8842ec5493a818e72e0dd8f2e22a998466037c9 (patch) | |
| tree | 4ede5d69d7442086045b9b15e9f64e28b25ea618 /packages | |
| parent | 3c2efdd0d3453bd42887895be26a9c76b7ae13f3 (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.patch | 13544 | ||||
| -rw-r--r-- | packages/packagekit/packagekit_git.bb | 6 |
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: ++ |
