[PackageKit-commit] packagekit: Branch 'master' - 62 commits
Richard Hughes
hughsient at kemper.freedesktop.org
Mon Sep 15 00:19:10 PDT 2008
backends/apt/aptDBUSBackend.py | 2
backends/dummy/pk-backend-dummy.c | 45 +-
backends/smart/helpers/resolve.py | 4
backends/smart/helpers/smartBackend.py | 186 +++++++-
backends/smart/pk-backend-smart.c | 3
backends/test/helpers/search-name.sh | 2
backends/urpmi/helpers/get-distro-upgrades.pl | 1
backends/urpmi/helpers/get-updates.pl | 12
backends/urpmi/helpers/install-packages.pl | 9
backends/urpmi/helpers/urpmi-dispatched-backend.pl | 443 +++++++++++++++++++++
backends/urpmi/helpers/urpmi_backend/actions.pm | 6
backends/yum/pk-backend-yum.c | 1
backends/yum/yumBackend.py | 226 ++++++++--
backends/yum/yumComps.py | 64 ++-
contrib/PackageKit.spec.in | 1
data/Makefile.am | 4
data/pk-upgrade-distro.sh | 26 +
libpackagekit/pk-enum.c | 6
libpackagekit/pk-enum.h | 6
libpackagekit/pk-extra.c | 36 +
src/pk-backend-spawn.c | 11
src/pk-backend.c | 11
22 files changed, 976 insertions(+), 129 deletions(-)
New commits:
commit e0739826d88716387c075d903ffd782667a5c928
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 20:36:22 2008 +0200
yum: handle unknown group in search-group
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 9b4a626..a909715 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -100,6 +100,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
except yum.Errors.RepoError,e:
self.error(ERROR_NO_CACHE,str(e))
+
return wrapper
def __init__(self,args,lock=True):
@@ -179,7 +180,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
def _get_nevra(self,pkg):
''' gets the NEVRA for a pkg '''
- return "%s-%s:%s-%s.%s" % (pkg.name,pkg.epoch,pkg.version,pkg.release,pkg.arch);
+ return "%s-%s:%s-%s.%s" % (pkg.name,pkg.epoch,pkg.version,pkg.release,pkg.arch)
def _do_meta_package_search(self,filters,key):
grps = self.comps.get_meta_packages()
@@ -294,7 +295,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
if show_avail:
self.package(id,INFO_COLLECTION_AVAILABLE,grp.description)
- @handle_repo_error
+ #@handle_repo_error
def search_group(self,filters,group_key):
'''
Implement the {backend}-search-group functionality
@@ -317,6 +318,10 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
# get the packagelist for this group
all_packages = self.comps.get_package_list(group_key)
+ # group don't exits, just bail out
+ if not all_packages:
+ return
+
# get installed packages
self.percentage(10)
pkgfilter.add_installed(self._get_installed_from_names(all_packages))
@@ -1753,7 +1758,7 @@ class DownloadCallback(BaseMeter):
@param name: filename
@param frac: Progress fracment (0 -> 1)
@param fread: formated string containing BytesRead
- @param ftime : formated string containing remaining or elapsed time
+ @param ftime: formated string containing remaining or elapsed time
'''
pct = int(frac*100)
if name != self.oldName: # If this a new package
commit 833e2b600c58e4f82b92aa0296a70ff7569ae29e
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 16:58:12 2008 +0200
smart: report get_fileserror when package not found or in wrong channel
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index c98992d..3228318 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -558,8 +558,9 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
packages = self._process_search_results(results)
if len(packages) == 0:
+ packagestring = self._string_packageid(packageid)
self.error(ERROR_PACKAGE_NOT_FOUND,
- 'Package %s was not found' % package)
+ 'Package %s was not found' % packagestring)
return
channels = self._search_channels(packageid)
@@ -622,18 +623,30 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
packages = self._process_search_results(results)
- if len(packages) != 1:
+ if len(packages) == 0:
+ packagestring = self._string_packageid(packageid)
+ self.error(ERROR_PACKAGE_NOT_FOUND,
+ 'Package %s was not found' % packagestring)
return
+ channels = self._search_channels(packageid)
+
package = packages[0]
# FIXME: Only installed packages have path lists.
- paths = []
+ paths = None
for loader in package.loaders:
+ if channels and loader.getChannel() not in channels:
+ continue
info = loader.getInfo(package)
paths = info.getPathList()
if len(paths) > 0:
break
+ if paths == None:
+ self.error(ERROR_PACKAGE_NOT_FOUND,
+ 'Package %s in other repo' % package)
+ return
+
self.files(packageid, ";".join(paths))
def _text_to_boolean(self,text):
commit fb5ec07f1a81498fb9fbc4817e8aca69ada24c29
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 16:42:52 2008 +0200
smart: report get_details error when package not found or in wrong channel
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 16b6baf..c98992d 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -558,6 +558,8 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
packages = self._process_search_results(results)
if len(packages) == 0:
+ self.error(ERROR_PACKAGE_NOT_FOUND,
+ 'Package %s was not found' % package)
return
channels = self._search_channels(packageid)
@@ -565,12 +567,14 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
package = packages[0]
infos = []
for loader in package.loaders:
- if loader.getChannel() not in channels:
+ if channels and loader.getChannel() not in channels:
continue
info = loader.getInfo(package)
infos.append(info)
- if len(infos) != 1:
+ if len(infos) == 0:
+ self.error(ERROR_PACKAGE_NOT_FOUND,
+ 'Package %s in other repo' % package)
return
infos.sort()
@@ -835,12 +839,13 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
repoid = idparts[3]
if repoid == 'local':
channels = self.ctrl.getFileChannels()
- else:
+ elif repoid:
+ if repoid == 'installed':
+ repoid = self.systemchannel
channels = self.ctrl.getChannels()
- if repoid:
- if repoid == 'installed':
- repoid = self.systemchannel
- channels = [x for x in channels if x.getAlias() == repoid]
+ channels = [x for x in channels if x.getAlias() == repoid]
+ else:
+ channels = None
return channels
def _package_is_collection(self, package):
commit a1200b5c949f55059c4783e7519790ab4303afa1
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 16:28:24 2008 +0200
smart: make sure that get_details results matches package_id repoid
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index f7dbd1c..16b6baf 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -557,15 +557,22 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
packages = self._process_search_results(results)
- if len(packages) != 1:
+ if len(packages) == 0:
return
+ channels = self._search_channels(packageid)
+
package = packages[0]
infos = []
for loader in package.loaders:
+ if loader.getChannel() not in channels:
+ continue
info = loader.getInfo(package)
infos.append(info)
+ if len(infos) != 1:
+ return
+
infos.sort()
info = infos[0]
@@ -820,6 +827,22 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
return (ratio, results, suggestions)
+ def _channel_is_local(self, channel):
+ return isinstance(channel, smart.channel.FileChannel)
+
+ def _search_channels(self, packageid):
+ idparts = packageid.split(';')
+ repoid = idparts[3]
+ if repoid == 'local':
+ channels = self.ctrl.getFileChannels()
+ else:
+ channels = self.ctrl.getChannels()
+ if repoid:
+ if repoid == 'installed':
+ repoid = self.systemchannel
+ channels = [x for x in channels if x.getAlias() == repoid]
+ return channels
+
def _package_is_collection(self, package):
return package.name.startswith('^')
@@ -865,7 +888,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
info = loader.getInfo(package)
if package.installed:
data = 'installed'
- elif isinstance(channel, smart.channel.FileChannel):
+ elif self._channel_is_local(channel):
data = 'local'
else:
data = channel.getAlias()
commit 6390edc59448a4b0c11d92a7f5d87bd8d4be67c0
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 15:31:38 2008 +0200
smart: use @ instead of ^ for rpm collection name prefix
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 6f063aa..f7dbd1c 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -810,6 +810,8 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
idparts = packageid.split(';')
# note: currently you can only search in channels native to system
packagestring = self._joinpackage(idparts[0], idparts[1], idparts[2])
+ if packagestring.startswith('@'):
+ packagestring = packagestring.replace('@', '^', 1)
return packagestring
def _search_packageid(self, packageid):
@@ -855,7 +857,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
collection = False
if name.startswith('^'):
collection = True
- # FIXME: replace ^
+ name = name.replace('^', '@', 1)
for loader in package.loaders:
channel = loader.getChannel()
if package.installed and not channel.getType().endswith('-sys'):
commit 6da37878fcf036ff2befdea81e916eaea2ddee52
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 14:12:43 2008 +0200
smart: set special status for collection packages
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 3886441..6f063aa 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -818,12 +818,21 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
return (ratio, results, suggestions)
+ def _package_is_collection(self, package):
+ return package.name.startswith('^')
+
def _add_package(self, package, status=None):
if not status:
- if package.installed:
- status = INFO_INSTALLED
+ if self._package_is_collection(package):
+ if package.installed:
+ status = INFO_COLLECTION_INSTALLED
+ else:
+ status = INFO_COLLECTION_AVAILABLE
else:
- status = INFO_AVAILABLE
+ if package.installed:
+ status = INFO_INSTALLED
+ else:
+ status = INFO_AVAILABLE
self._package_list.append((package, status))
def _show_package_list(self):
@@ -917,9 +926,6 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
return False
return True
- def _package_is_collection(self, package):
- return package.name.startswith('^')
-
def _package_is_graphical(self, package):
from smart.backends.rpm.base import RPMPackage
from smart.backends.deb.base import DebPackage
commit 4e432cd12c6771dfbd059aaee27f5d79dab9cfaa
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 13:59:08 2008 +0200
smart: add collections_filtering
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 9b2b87c..3886441 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -843,6 +843,10 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
else:
status = INFO_UNKNOWN
name, version, arch = self._splitpackage(package)
+ collection = False
+ if name.startswith('^'):
+ collection = True
+ # FIXME: replace ^
for loader in package.loaders:
channel = loader.getChannel()
if package.installed and not channel.getType().endswith('-sys'):
@@ -913,6 +917,9 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
return False
return True
+ def _package_is_collection(self, package):
+ return package.name.startswith('^')
+
def _package_is_graphical(self, package):
from smart.backends.rpm.base import RPMPackage
from smart.backends.deb.base import DebPackage
@@ -961,6 +968,12 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
return False
if filter == FILTER_NOT_ARCH and same:
return False
+ if filter in (FILTER_COLLECTIONS, FILTER_NOT_COLLECTIONS):
+ collection = self._package_is_collection(package)
+ if filter == FILTER_COLLECTIONS and not collection:
+ return False
+ if filter == FILTER_NOT_COLLECTIONS and collection:
+ return False
if filter in (FILTER_GUI, FILTER_NOT_GUI):
graphical = self._package_is_graphical(package)
if graphical is None: # tristate boolean
diff --git a/backends/smart/pk-backend-smart.c b/backends/smart/pk-backend-smart.c
index e4e75d5..a63a43d 100644
--- a/backends/smart/pk-backend-smart.c
+++ b/backends/smart/pk-backend-smart.c
@@ -101,6 +101,7 @@ backend_get_filters (PkBackend *backend)
PK_FILTER_ENUM_GUI,
PK_FILTER_ENUM_DEVELOPMENT,
PK_FILTER_ENUM_BASENAME,
+ PK_FILTER_ENUM_COLLECTIONS,
/* FIXME: These depend on a newer Smart API: */
PK_FILTER_ENUM_FREE,
-1);
commit 5d9469020d306c045d3fef08f633a287aa1dcc9a
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 13:37:06 2008 +0200
trivial: put collections outside the regular groups
diff --git a/backends/smart/pk-backend-smart.c b/backends/smart/pk-backend-smart.c
index 58a5b59..e4e75d5 100644
--- a/backends/smart/pk-backend-smart.c
+++ b/backends/smart/pk-backend-smart.c
@@ -62,6 +62,7 @@ static PkBitfield
backend_get_groups (PkBackend *backend)
{
return pk_bitfield_from_enums (
+ PK_GROUP_ENUM_COLLECTIONS,
/* FIXME: These depend on the Smart backends: */
PK_GROUP_ENUM_ACCESSORIES,
PK_GROUP_ENUM_ADMIN_TOOLS,
@@ -77,7 +78,6 @@ backend_get_groups (PkBackend *backend)
PK_GROUP_ENUM_INTERNET,
PK_GROUP_ENUM_LEGACY,
PK_GROUP_ENUM_LOCALIZATION,
- PK_GROUP_ENUM_COLLECTIONS,
PK_GROUP_ENUM_MULTIMEDIA,
PK_GROUP_ENUM_NETWORK,
PK_GROUP_ENUM_OTHER,
commit 1ffd991fbdb2a4ae253f0aa97d9ce471274b1bba
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sun Sep 14 13:28:17 2008 +0200
make smart compile again, after the latest rename
diff --git a/backends/smart/pk-backend-smart.c b/backends/smart/pk-backend-smart.c
index 36e6e8f..58a5b59 100644
--- a/backends/smart/pk-backend-smart.c
+++ b/backends/smart/pk-backend-smart.c
@@ -77,7 +77,7 @@ backend_get_groups (PkBackend *backend)
PK_GROUP_ENUM_INTERNET,
PK_GROUP_ENUM_LEGACY,
PK_GROUP_ENUM_LOCALIZATION,
- PK_GROUP_ENUM_META_PACKAGES,
+ PK_GROUP_ENUM_COLLECTIONS,
PK_GROUP_ENUM_MULTIMEDIA,
PK_GROUP_ENUM_NETWORK,
PK_GROUP_ENUM_OTHER,
commit f36fa2bf0e7aa4da8f137448849a625db6a403cd
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 12:02:48 2008 +0100
yum: support the collections group
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index b12fd4c..be6f420 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -55,6 +55,7 @@ static PkBitfield
backend_get_groups (PkBackend *backend)
{
return pk_bitfield_from_enums (
+ PK_GROUP_ENUM_COLLECTIONS,
PK_GROUP_ENUM_ADMIN_TOOLS,
PK_GROUP_ENUM_DESKTOP_GNOME,
PK_GROUP_ENUM_DESKTOP_KDE,
commit a7eb8bcdc4f8a842886891f37c89ee5e4e6c9345
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 12:01:17 2008 +0100
trivial: rename PK_FILTER_ENUM_META_PACKAGES to PK_FILTER_ENUM_COLLECTIONS : save file this time
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 9507cfc..0c15d20 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -183,8 +183,8 @@ typedef enum {
PK_FILTER_ENUM_NOT_ARCH,
PK_FILTER_ENUM_SOURCE,
PK_FILTER_ENUM_NOT_SOURCE,
- PK_FILTER_ENUM_META_PACKAGES,
- PK_FILTER_ENUM_NOT_META_PACKAGES,
+ PK_FILTER_ENUM_COLLECTIONS,
+ PK_FILTER_ENUM_NOT_COLLECTIONS,
PK_FILTER_ENUM_UNKNOWN
} PkFilterEnum;
commit e635f08e565616ccddbfb79aded99cae6ef31317
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 12:00:28 2008 +0100
rename PK_FILTER_ENUM_META_PACKAGES to PK_FILTER_ENUM_COLLECTIONS
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index daeaf41..9b4a626 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -203,7 +203,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
installed = []
available = []
- if FILTER_META_PACKAGES in fltlist:
+ if FILTER_COLLECTIONS in fltlist:
self._do_meta_package_search(fltlist,key)
for (pkg,values) in res:
diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index f652031..c9446c7 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -215,8 +215,8 @@ static PkEnumMatch enum_filter[] = {
{PK_FILTER_ENUM_NOT_ARCH, "~arch"},
{PK_FILTER_ENUM_SOURCE, "source"},
{PK_FILTER_ENUM_NOT_SOURCE, "~source"},
- {PK_FILTER_ENUM_META_PACKAGES, "meta"},
- {PK_FILTER_ENUM_NOT_META_PACKAGES, "~meta"},
+ {PK_FILTER_ENUM_COLLECTIONS, "collections"},
+ {PK_FILTER_ENUM_NOT_COLLECTIONS, "~collections"},
{0, NULL}
};
commit c2d42a972976b6848d6b7f2da065ed37a1e2a066
Merge: 471590e... 24b6238...
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 11:58:03 2008 +0100
trivial: fix conflicts
diff --cc backends/yum/yumBackend.py
index 2b7ce3d,1828068..daeaf41
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@@ -269,16 -278,23 +278,22 @@@ class PackageKitYumBackend(PackageKitBa
if i % 10 == 0:
pct += step
self.percentage(pct)
- id = "%s;meta;meta;meta" % col
- grp = self.yumbase.comps.return_group(col)
- if grp:
- if grp.installed:
- self.package(id,INFO_COLLECTION_INSTALLED,grp.description)
- else:
- if show_avail:
- self.package(id,INFO_COLLECTION_AVAILABLE,grp.description)
+ self._show_meta_package(col,fltlist)
self.percentage(100)
+ def _show_meta_package(self,grpid,fltlist=[]):
+ show_avail = FILTER_INSTALLED not in fltlist
+ show_inst = FILTER_NOT_INSTALLED not in fltlist
+ id = "%s;meta;meta;meta" % grpid
+ grp = self.yumbase.comps.return_group(grpid)
+ if grp:
+ if grp.installed:
+ if show_inst:
- self.package(id,INFO_INSTALLED,grp.description)
++ self.package(id,INFO_COLLECTION_INSTALLED,grp.description)
+ else:
+ if show_avail:
- self.package(id,INFO_AVAILABLE,grp.description)
-
++ self.package(id,INFO_COLLECTION_AVAILABLE,grp.description)
+
@handle_repo_error
def search_group(self,filters,group_key):
'''
commit 471590ed4e5a04e2d2ff47737dc0451104a71fcf
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 11:55:59 2008 +0100
feature: add PK_INFO_ENUM_COLLECTION_INSTALLED and PK_INFO_ENUM_COLLECTION_AVAILABLE
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 3e18bf4..2b7ce3d 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -273,14 +273,12 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
grp = self.yumbase.comps.return_group(col)
if grp:
if grp.installed:
- self.package(id,INFO_INSTALLED,grp.description)
+ self.package(id,INFO_COLLECTION_INSTALLED,grp.description)
else:
if show_avail:
- self.package(id,INFO_AVAILABLE,grp.description)
+ self.package(id,INFO_COLLECTION_AVAILABLE,grp.description)
self.percentage(100)
-
-
@handle_repo_error
def search_group(self,filters,group_key):
'''
diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index 1fe20dc..aecc7e5 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -297,6 +297,8 @@ static PkEnumMatch enum_info[] = {
{PK_INFO_ENUM_REMOVING, "removing"},
{PK_INFO_ENUM_CLEANUP, "cleanup"},
{PK_INFO_ENUM_OBSOLETING, "obsoleting"},
+ {PK_INFO_ENUM_COLLECTION_INSTALLED, "collection-installed"},
+ {PK_INFO_ENUM_COLLECTION_AVAILABLE, "collection-available"},
{0, NULL}
};
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 4c88fe9..5700aae 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -372,6 +372,8 @@ typedef enum {
PK_INFO_ENUM_REMOVING,
PK_INFO_ENUM_CLEANUP,
PK_INFO_ENUM_OBSOLETING,
+ PK_INFO_ENUM_COLLECTION_INSTALLED,
+ PK_INFO_ENUM_COLLECTION_AVAILABLE,
PK_INFO_ENUM_UNKNOWN
} PkInfoEnum;
commit b3f27588a218c5a865e0a17428e6e689cb731372
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 11:48:06 2008 +0100
trivial: rename PK_GROUP_ENUM_META_PACKAGES to PK_GROUP_ENUM_COLLECTIONS
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 2fc7a35..9b2b87c 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -468,13 +468,13 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'User Interface/X' : GROUP_DESKTOP_OTHER,
'User Interface/X Hardware Support' : GROUP_DESKTOP_OTHER,
# Yum
- 'Virtual' : GROUP_META_PACKAGES,
- 'Virtual/Applications' : GROUP_META_PACKAGES,
- 'Virtual/Base System' : GROUP_META_PACKAGES,
- 'Virtual/Desktop Environments' : GROUP_META_PACKAGES,
- 'Virtual/Development' : GROUP_META_PACKAGES,
- 'Virtual/Languages' : GROUP_META_PACKAGES,
- 'Virtual/Servers' : GROUP_META_PACKAGES,
+ 'Virtual' : GROUP_COLLECTIONS,
+ 'Virtual/Applications' : GROUP_COLLECTIONS,
+ 'Virtual/Base System' : GROUP_COLLECTIONS,
+ 'Virtual/Desktop Environments' : GROUP_COLLECTIONS,
+ 'Virtual/Development' : GROUP_COLLECTIONS,
+ 'Virtual/Languages' : GROUP_COLLECTIONS,
+ 'Virtual/Servers' : GROUP_COLLECTIONS,
# RPM (novell)
'Productivity/Archiving' : GROUP_OTHER, ### FIXME
'Productivity/Databases' : GROUP_OTHER, ### FIXME
@@ -499,14 +499,14 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'System/GUI/Other' : GROUP_DESKTOP_OTHER,
'System/GUI/XFCE' : GROUP_DESKTOP_XFCE,
# YaST2
-# 'Virtual' : GROUP_META_PACKAGES,
- 'Virtual/Base Technologies' : GROUP_META_PACKAGES,
- 'Virtual/Desktop Functions' : GROUP_META_PACKAGES,
-# 'Virtual/Development' : GROUP_META_PACKAGES,
- 'Virtual/GNOME Desktop' : GROUP_META_PACKAGES,
- 'Virtual/Graphical Environments' : GROUP_META_PACKAGES,
- 'Virtual/KDE Desktop' : GROUP_META_PACKAGES,
- 'Virtual/Server Functions' : GROUP_META_PACKAGES,
+# 'Virtual' : GROUP_COLLECTIONS,
+ 'Virtual/Base Technologies' : GROUP_COLLECTIONS,
+ 'Virtual/Desktop Functions' : GROUP_COLLECTIONS,
+# 'Virtual/Development' : GROUP_COLLECTIONS,
+ 'Virtual/GNOME Desktop' : GROUP_COLLECTIONS,
+ 'Virtual/Graphical Environments' : GROUP_COLLECTIONS,
+ 'Virtual/KDE Desktop' : GROUP_COLLECTIONS,
+ 'Virtual/Server Functions' : GROUP_COLLECTIONS,
# DEB
"admin" : GROUP_ADMIN_TOOLS,
"base" : GROUP_SYSTEM,
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 49f66d8..3e18bf4 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -297,7 +297,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
# Handle collections
# FIXME: add the right enum here
- if group_key == GROUP_META_PACKAGES:
+ if group_key == GROUP_COLLECTIONS:
self._handle_collections(fltlist)
return
diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index 1aa9217..1fe20dc 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -251,7 +251,7 @@ static PkEnumMatch enum_group[] = {
{PK_GROUP_ENUM_SCIENCE, "science"},
{PK_GROUP_ENUM_DOCUMENTATION, "documentation"},
{PK_GROUP_ENUM_ELECTRONICS, "electronics"},
- {PK_GROUP_ENUM_META_PACKAGES, "meta-packages"},
+ {PK_GROUP_ENUM_COLLECTIONS, "collections"},
{0, NULL}
};
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 937841a..4c88fe9 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -309,7 +309,7 @@ typedef enum {
PK_GROUP_ENUM_SCIENCE,
PK_GROUP_ENUM_DOCUMENTATION,
PK_GROUP_ENUM_ELECTRONICS,
- PK_GROUP_ENUM_META_PACKAGES,
+ PK_GROUP_ENUM_COLLECTIONS,
PK_GROUP_ENUM_UNKNOWN
} PkGroupEnum;
commit 24b62387ce9cb7e7eeb1062d09439dc23f3f1667
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 12:42:50 2008 +0200
Added PK_FILTER_ENUM_META_PACKAGES and PK_FILTER_ENUM_NOT_META_PACKAGES enums and make the yum backend search support this
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 08d23a9..1828068 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -181,6 +181,13 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
''' gets the NEVRA for a pkg '''
return "%s-%s:%s-%s.%s" % (pkg.name,pkg.epoch,pkg.version,pkg.release,pkg.arch);
+ def _do_meta_package_search(self,filters,key):
+ grps = self.comps.get_meta_packages()
+ for grpid in grps:
+ if key in grpid:
+ self._show_meta_package(grpid,filters)
+
+
@handle_repo_error
def _do_search(self,searchlist,filters,key):
'''
@@ -196,6 +203,9 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
installed = []
available = []
+ if FILTER_META_PACKAGES in fltlist:
+ self._do_meta_package_search(fltlist,key)
+
for (pkg,values) in res:
if pkg.repo.id == 'installed':
installed.append(pkg)
@@ -259,7 +269,6 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
collections = self.comps.get_meta_packages()
self.percentage(20)
- show_avail = FILTER_INSTALLED not in fltlist
step = int(800/len(collections))
print step
pct=20
@@ -269,16 +278,21 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
if i % 10 == 0:
pct += step
self.percentage(pct)
- id = "%s;meta;meta;meta" % col
- grp = self.yumbase.comps.return_group(col)
- if grp:
- if grp.installed:
- self.package(id,INFO_INSTALLED,grp.description)
- else:
- if show_avail:
- self.package(id,INFO_AVAILABLE,grp.description)
+ self._show_meta_package(col,fltlist)
self.percentage(100)
+ def _show_meta_package(self,grpid,fltlist=[]):
+ show_avail = FILTER_INSTALLED not in fltlist
+ show_inst = FILTER_NOT_INSTALLED not in fltlist
+ id = "%s;meta;meta;meta" % grpid
+ grp = self.yumbase.comps.return_group(grpid)
+ if grp:
+ if grp.installed:
+ if show_inst:
+ self.package(id,INFO_INSTALLED,grp.description)
+ else:
+ if show_avail:
+ self.package(id,INFO_AVAILABLE,grp.description)
@handle_repo_error
diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index 1aa9217..4197c29 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -215,6 +215,8 @@ static PkEnumMatch enum_filter[] = {
{PK_FILTER_ENUM_NOT_ARCH, "~arch"},
{PK_FILTER_ENUM_SOURCE, "source"},
{PK_FILTER_ENUM_NOT_SOURCE, "~source"},
+ {PK_FILTER_ENUM_META_PACKAGES, "meta"},
+ {PK_FILTER_ENUM_NOT_META_PACKAGES, "~meta"},
{0, NULL}
};
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 937841a..98fcb47 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -183,6 +183,8 @@ typedef enum {
PK_FILTER_ENUM_NOT_ARCH,
PK_FILTER_ENUM_SOURCE,
PK_FILTER_ENUM_NOT_SOURCE,
+ PK_FILTER_ENUM_META_PACKAGES,
+ PK_FILTER_ENUM_NOT_META_PACKAGES,
PK_FILTER_ENUM_UNKNOWN
} PkFilterEnum;
commit c2001b5b2176fd5af50117c543ca7b9c574db37e
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 11:53:57 2008 +0200
yum: metapackage code refactoring, bug fixes and support for get-depends
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index c9d73d5..08d23a9 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -477,13 +477,16 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
return epoch,version,release
def _is_meta_package(self,id):
- meta = None
+ grp = None
if len(id.split(';')) > 1:
# Split up the id
(n,idver,a,d) = self.get_package_from_id(id)
if idver == 'meta' and a == 'meta' and d == 'meta':
meta = n
- return meta
+ grp = self.yumbase.comps.return_group(meta)
+ if not grp:
+ self.error(ERROR_PACKAGE_NOT_FOUND,"The Group %s dont exist" % meta)
+ return grp
def _findPackage(self,id):
'''
@@ -492,7 +495,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
# Bailout if meta packages, just to be sure
if self._is_meta_package(id):
return None,False
-
+
# is this an real id or just an name
if len(id.split(';')) > 1:
# Split up the id
@@ -566,15 +569,12 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
for package in package_ids:
self.percentage(percentage)
- meta = self._is_meta_package(package)
- if meta:
- grp = self.yumbase.comps.return_group(meta)
- if not grp:
- self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s dont exist" % meta)
+ grp = self._is_meta_package(package)
+ if grp:
if not grp.installed:
- self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s is not installed" % meta)
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s is not installed" % grp.groupid)
else:
- txmbr = self.yumbase.groupRemove(meta)
+ txmbr = self.yumbase.groupRemove(grp.groupid)
rc,msgs = self.yumbase.buildTransaction()
if rc !=2:
self.error(ERROR_DEP_RESOLUTION_FAILED,self._format_msgs(msgs))
@@ -739,6 +739,25 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
return deps_list
+ def _get_group_packages(self,grp):
+ '''
+ Get the packages there will be installed when a comps group
+ is installed
+ '''
+ if not grp.installed:
+ txmbrs = self.yumbase.selectGroup(grp.groupid)
+ else:
+ txmbrs = self.yumbase.groupRemove(grp.groupid)
+ pkgs = []
+ for t in txmbrs:
+ pkgs.append(t.po)
+ if not grp.installed:
+ self.yumbase.deselectGroup(grp.groupid)
+ else:
+ self.yumbase.groupUnremove(grp.groupid)
+ return pkgs
+
+
def get_depends(self,filters,package_ids,recursive_text):
'''
Print a list of depends for a given package
@@ -761,13 +780,18 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
# resolve each package_id to a pkg object
for package in package_ids:
self.percentage(percentage)
- name = package.split(';')[0]
- pkg,inst = self._findPackage(package)
- if pkg:
- resolve_list.append(pkg)
+ grp = self._is_meta_package(package)
+ if grp:
+ pkgs = self._get_group_packages(grp)
+ resolve_list.extend(pkgs)
else:
- self.error(ERROR_PACKAGE_NOT_FOUND,'Package %s was not found' % package)
- break
+ name = package.split(';')[0]
+ pkg,inst = self._findPackage(package)
+ if pkg:
+ resolve_list.append(pkg)
+ else:
+ self.error(ERROR_PACKAGE_NOT_FOUND,'Package %s was not found' % package)
+ break
percentage += bump
# get the best deps
@@ -905,14 +929,11 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
txmbrs = []
already_warned = False
for package in package_ids:
- meta = self._is_meta_package(package)
- if meta:
- grp = self.yumbase.comps.return_group(meta)
- if not grp:
- self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The Group %s dont exist" % meta)
+ grp = self._is_meta_package(package)
+ if grp:
if grp.installed:
- self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This Group %s is already installed" % meta)
- txmbr = self.yumbase.selectGroup(meta)
+ self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This Group %s is already installed" % grp.groupid)
+ txmbr = self.yumbase.selectGroup(grp.groupid)
for t in txmbr:
repo = self.yumbase.repos.getRepo(t.po.repoid)
if not already_warned and not repo.gpgcheck:
@@ -1231,14 +1252,11 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
txmbrs = []
for package in package_ids:
- meta = self._is_meta_package(package)
- if meta:
- grp = self.yumbase.comps.return_group(meta)
- if not grp:
- self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s dont exist" % meta)
+ grp = self._is_meta_package(package)
+ if grp:
if not grp.installed:
- self.error(ERROR_PACKAGE_NOT_INSTALLED,"This Group %s is not installed" % meta)
- txmbr = self.yumbase.groupRemove(meta)
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"This Group %s is not installed" % grp.groupid)
+ txmbr = self.yumbase.groupRemove(grp.groupid)
txmbrs.extend(txmbr)
else:
pkg,inst = self._findPackage(package)
@@ -1788,10 +1806,10 @@ class PackageKitCallback(RPMBaseCallback):
def _showName(self,status):
if type(self.curpkg) in types.StringTypes:
- id = self.get_package_id(self.curpkg,'','','')
+ id = self.base.get_package_id(self.curpkg,'','','')
else:
pkgver = self.base._get_package_ver(self.curpkg)
- id = self.get_package_id(self.curpkg.name,pkgver,self.curpkg.arch,self.curpkg.repo)
+ id = self.base.get_package_id(self.curpkg.name,pkgver,self.curpkg.arch,self.curpkg.repo)
self.base.package(id,status,"")
def event(self,package,action,te_current,te_total,ts_current,ts_total):
commit 4abe306bc887cb7830eee9a16bbcba38099072bb
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 10:01:38 2008 +0200
yum: make get-requires handle meta packages (comps groups)
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 49f66d8..c9d73d5 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -566,20 +566,36 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
for package in package_ids:
self.percentage(percentage)
- pkg,inst = self._findPackage(package)
- # FIXME: This is a hack, it simulates a removal of the
- # package and return the transaction
- if inst and pkg:
- resolve_list.append(pkg)
- txmbrs = self.yumbase.remove(po=pkg)
- if txmbrs:
+ meta = self._is_meta_package(package)
+ if meta:
+ grp = self.yumbase.comps.return_group(meta)
+ if not grp:
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s dont exist" % meta)
+ if not grp.installed:
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s is not installed" % meta)
+ else:
+ txmbr = self.yumbase.groupRemove(meta)
rc,msgs = self.yumbase.buildTransaction()
if rc !=2:
self.error(ERROR_DEP_RESOLUTION_FAILED,self._format_msgs(msgs))
else:
for txmbr in self.yumbase.tsInfo:
- if pkg not in deps_list:
- deps_list.append(txmbr.po)
+ deps_list.append(txmbr.po)
+ else:
+ pkg,inst = self._findPackage(package)
+ # FIXME: This is a hack, it simulates a removal of the
+ # package and return the transaction
+ if inst and pkg:
+ resolve_list.append(pkg)
+ txmbrs = self.yumbase.remove(po=pkg)
+ if txmbrs:
+ rc,msgs = self.yumbase.buildTransaction()
+ if rc !=2:
+ self.error(ERROR_DEP_RESOLUTION_FAILED,self._format_msgs(msgs))
+ else:
+ for txmbr in self.yumbase.tsInfo:
+ if pkg not in deps_list:
+ deps_list.append(txmbr.po)
percentage += bump
# remove any of the original names
commit 027544e109eb1eab459fbd15f630efea257556f5
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Sep 14 09:30:51 2008 +0100
trivial: when using pk_extra_set_locale(extra,NULL) use the session default as it sucks to do this in every app
diff --git a/libpackagekit/pk-extra.c b/libpackagekit/pk-extra.c
index f4d1b36..321f0bc 100644
--- a/libpackagekit/pk-extra.c
+++ b/libpackagekit/pk-extra.c
@@ -36,6 +36,7 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif /* HAVE_UNISTD_H */
+#include <locale.h>
#include <glib/gi18n.h>
#include <sqlite3.h>
@@ -267,7 +268,7 @@ pk_extra_populate_package_cache (PkExtra *extra)
/**
* pk_extra_set_locale:
* @extra: a valid #PkExtra instance
- * @locale: a correct locale
+ * @locale: a correct locale, or NULL if the session default should be used
*
* Return value: %TRUE if set correctly
**/
@@ -276,16 +277,34 @@ pk_extra_set_locale (PkExtra *extra, const gchar *locale)
{
guint i;
guint len;
+ gchar *locale_default; /* does not need to be freed */
g_return_val_if_fail (PK_IS_EXTRA (extra), FALSE);
- g_return_val_if_fail (locale != NULL, FALSE);
+ /* old locale no longer valid */
g_free (extra->priv->locale);
- extra->priv->locale = g_strdup (locale);
- extra->priv->locale_base = g_strdup (locale);
+ g_free (extra->priv->locale_base);
+ extra->priv->locale = NULL;
+ extra->priv->locale_base = NULL;
+
+ /* using hardcoded locale */
+ if (locale != NULL) {
+ extra->priv->locale = g_strdup (locale);
+ } else {
+ /* using default */
+ locale_default = setlocale (LC_ALL, NULL);
+ if (locale_default == NULL) {
+ egg_warning ("cannot find default locale");
+ return FALSE;
+ }
+ extra->priv->locale = g_strdup (locale_default);
+ }
+
+ /* copy as we modify */
+ extra->priv->locale_base = g_strdup (extra->priv->locale);
/* we only want the first section to compare */
- len = egg_strlen (locale, 10);
+ len = egg_strlen (extra->priv->locale, 10);
for (i=0; i<len; i++) {
if (extra->priv->locale_base[i] == '_') {
extra->priv->locale_base[i] = '\0';
commit 6620767d171725528e3988c053f66c4f1e34706d
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 09:27:33 2008 +0200
yum: make remove-packages handle meta packages (comps groups) and add detection of non existing groups
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index d94c1e5..49f66d8 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -891,9 +891,12 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
for package in package_ids:
meta = self._is_meta_package(package)
if meta:
- txmbr = self.yumbase.selectGroup(meta)
- if not txmbr:
+ grp = self.yumbase.comps.return_group(meta)
+ if not grp:
+ self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The Group %s dont exist" % meta)
+ if grp.installed:
self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This Group %s is already installed" % meta)
+ txmbr = self.yumbase.selectGroup(meta)
for t in txmbr:
repo = self.yumbase.repos.getRepo(t.po.repoid)
if not already_warned and not repo.gpgcheck:
@@ -1212,12 +1215,22 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
txmbrs = []
for package in package_ids:
- pkg,inst = self._findPackage(package)
- if pkg and inst:
- txmbr = self.yumbase.remove(po=pkg)
+ meta = self._is_meta_package(package)
+ if meta:
+ grp = self.yumbase.comps.return_group(meta)
+ if not grp:
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"The Group %s dont exist" % meta)
+ if not grp.installed:
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"This Group %s is not installed" % meta)
+ txmbr = self.yumbase.groupRemove(meta)
txmbrs.extend(txmbr)
- if pkg and not inst:
- self.error(ERROR_PACKAGE_NOT_INSTALLED,"The package %s is not installed" % pkg.name)
+ else:
+ pkg,inst = self._findPackage(package)
+ if pkg and inst:
+ txmbr = self.yumbase.remove(po=pkg)
+ txmbrs.extend(txmbr)
+ if pkg and not inst:
+ self.error(ERROR_PACKAGE_NOT_INSTALLED,"The package %s is not installed" % pkg.name)
if txmbrs:
if allowdep != 'yes':
self._runYumTransaction(removedeps=False)
commit f94c0a83b587728488a4fffe8f07df609eaf72cf
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 09:04:25 2008 +0200
yum: remove-packages should not fail on meta package, just report remove failed for now
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 4835c77..d94c1e5 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -490,7 +490,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
find a package based on a package id (name;version;arch;repoid)
'''
# Bailout if meta packages, just to be sure
- if _is_meta_package(id):
+ if self._is_meta_package(id):
return None,False
# is this an real id or just an name
@@ -1216,7 +1216,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
if pkg and inst:
txmbr = self.yumbase.remove(po=pkg)
txmbrs.extend(txmbr)
- if not inst:
+ if pkg and not inst:
self.error(ERROR_PACKAGE_NOT_INSTALLED,"The package %s is not installed" % pkg.name)
if txmbrs:
if allowdep != 'yes':
commit c99040f107158c79af18c05630edaa8b2facf0d9
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 08:57:26 2008 +0200
yum: minor cleanup
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 2922f14..4835c77 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -489,6 +489,10 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
'''
find a package based on a package id (name;version;arch;repoid)
'''
+ # Bailout if meta packages, just to be sure
+ if _is_meta_package(id):
+ return None,False
+
# is this an real id or just an name
if len(id.split(';')) > 1:
# Split up the id
commit eb72ab5c41e37d0e3ea2f6cd922266bd76c5f31e
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 08:53:39 2008 +0200
yum: add some percentage to collections
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index f6fca56..2922f14 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -256,9 +256,19 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
Handle the special collection group
"""
# Fixme: Add some real code.
- colections = self.comps.get_meta_packages()
+ collections = self.comps.get_meta_packages()
+ self.percentage(20)
+
show_avail = FILTER_INSTALLED not in fltlist
- for col in colections:
+ step = int(800/len(collections))
+ print step
+ pct=20
+ i = 0
+ for col in collections:
+ i += 1
+ if i % 10 == 0:
+ pct += step
+ self.percentage(pct)
id = "%s;meta;meta;meta" % col
grp = self.yumbase.comps.return_group(col)
if grp:
@@ -267,6 +277,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
else:
if show_avail:
self.package(id,INFO_AVAILABLE,grp.description)
+ self.percentage(100)
commit fdec2a8c74f33dbfa3595edd8d814ed80714cdf5
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 08:43:23 2008 +0200
yum: strip trailing spaces
diff --git a/backends/yum/yumComps.py b/backends/yum/yumComps.py
index 2565fe4..7b00ae2 100755
--- a/backends/yum/yumComps.py
+++ b/backends/yum/yumComps.py
@@ -270,15 +270,15 @@ class yumComps:
group = row[0]
return group
-
+
def get_meta_packages(self):
metapkgs = set()
self.cursor.execute('SELECT groupid FROM groups')
for row in self.cursor:
metapkgs.add(row[0])
- return list(metapkgs)
+ return list(metapkgs)
+
-
def get_meta_package_list(self,groupid):
''' for a comps group, get the packagelist for this group (mandatory,default)'''
commit 696ba3acf5c8a27ad590e2d55baa5cb56347021e
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sun Sep 14 08:42:16 2008 +0200
yum: more metapackage functionality
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index db3762f..f6fca56 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -247,10 +247,29 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
pkgs = self.yumbase.rpmdb.searchNevra(name=package)
found.extend(pkgs)
return found
-
+
def _get_available_from_names(self,name_list):
return self.yumbase.pkgSack.searchNames(names=name_list)
+ def _handle_collections(self,fltlist):
+ """
+ Handle the special collection group
+ """
+ # Fixme: Add some real code.
+ colections = self.comps.get_meta_packages()
+ show_avail = FILTER_INSTALLED not in fltlist
+ for col in colections:
+ id = "%s;meta;meta;meta" % col
+ grp = self.yumbase.comps.return_group(col)
+ if grp:
+ if grp.installed:
+ self.package(id,INFO_INSTALLED,grp.description)
+ else:
+ if show_avail:
+ self.package(id,INFO_AVAILABLE,grp.description)
+
+
+
@handle_repo_error
def search_group(self,filters,group_key):
'''
@@ -265,6 +284,12 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
fltlist = filters.split(';')
pkgfilter = YumFilter(fltlist)
+ # Handle collections
+ # FIXME: add the right enum here
+ if group_key == GROUP_META_PACKAGES:
+ self._handle_collections(fltlist)
+ return
+
# get the packagelist for this group
all_packages = self.comps.get_package_list(group_key)
@@ -448,7 +473,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
if idver == 'meta' and a == 'meta' and d == 'meta':
meta = n
return meta
-
+
def _findPackage(self,id):
'''
find a package based on a package id (name;version;arch;repoid)
@@ -834,7 +859,7 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
show = False
if show:
self._show_package(pkg,INFO_AVAILABLE)
-
+
@handle_repo_error
def install_packages(self,package_ids):
'''
@@ -859,9 +884,9 @@ class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
if not already_warned and not repo.gpgcheck:
self.message(MESSAGE_UNTRUSTED_PACKAGE,"The untrusted package %s will be installed from %s." % (t.po.name, repo))
already_warned = True
-
- txmbrs.extend(txmbr)
- else:
+
+ txmbrs.extend(txmbr)
+ else:
pkg,inst = self._findPackage(package)
if pkg and not inst:
repo = self.yumbase.repos.getRepo(pkg.repoid)
diff --git a/backends/yum/yumComps.py b/backends/yum/yumComps.py
index 2ea2871..2565fe4 100755
--- a/backends/yum/yumComps.py
+++ b/backends/yum/yumComps.py
@@ -270,6 +270,15 @@ class yumComps:
group = row[0]
return group
+
+ def get_meta_packages(self):
+ metapkgs = set()
+ self.cursor.execute('SELECT groupid FROM groups')
+ for row in self.cursor:
+ metapkgs.add(row[0])
+ return list(metapkgs)
+
+
def get_meta_package_list(self,groupid):
''' for a comps group, get the packagelist for this group (mandatory,default)'''
commit 3861ddfda05c97b8427bd4475a892051f1335b19
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Sat Sep 13 15:52:48 2008 +0200
yum: add some code to support metapackage( comps/ yum group) installation
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index de91359..db3762f 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -29,7 +29,7 @@ import re
from packagekit.backend import *
from packagekit.progress import *
-from packagekit.package import *
+from packagekit.package import PackagekitPackage
import yum
from urlgrabber.progress import BaseMeter,format_time,format_number
from yum.rpmtrans import RPMBaseCallback
@@ -45,6 +45,7 @@ import types
import signal
import time
import os.path
+import logging
import tarfile
import tempfile
@@ -57,7 +58,6 @@ from yumComps import *
# Global vars
yumbase = None
progress = PackagekitProgress() # Progress object to store the progress
-pkpackage = PackagekitPackage()
MetaDataMap = {
'repomd' : STATUS_DOWNLOAD_REPOSITORY,
@@ -79,7 +79,7 @@ def sigquit(signum,frame):
yumbase.doUnlock(YUM_PID_FILE)
sys.exit(1)
-class PackageKitYumBackend(PackageKitBaseBackend):
+class PackageKitYumBackend(PackageKitBaseBackend,PackagekitPackage):
# Packages there require a reboot
rebootpkgs = ("kernel","kernel-smp","kernel-xen-hypervisor","kernel-PAE",
@@ -241,6 +241,16 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.status(STATUS_QUERY)
self._do_search(searchlist,filters,key)
+ def _get_installed_from_names(self,name_list):
+ found = []
+ for package in name_list:
+ pkgs = self.yumbase.rpmdb.searchNevra(name=package)
+ found.extend(pkgs)
+ return found
+
+ def _get_available_from_names(self,name_list):
+ return self.yumbase.pkgSack.searchNames(names=name_list)
+
@handle_repo_error
def search_group(self,filters,group_key):
'''
@@ -260,15 +270,12 @@ class PackageKitYumBackend(PackageKitBaseBackend):
# get installed packages
self.percentage(10)
- for package in all_packages:
- pkgs = self.yumbase.rpmdb.searchNevra(name=package)
- pkgfilter.add_installed(pkgs)
+ pkgfilter.add_installed(self._get_installed_from_names(all_packages))
# get available packages
self.percentage(20)
if FILTER_INSTALLED not in fltlist:
- pkgs = self.yumbase.pkgSack.searchNames(names=all_packages)
- pkgfilter.add_available(pkgs)
+ pkgfilter.add_available(self._get_available_from_names(all_packages))
# we couldn't do this when generating the list
package_list = pkgfilter.post_process()
@@ -433,6 +440,15 @@ class PackageKitYumBackend(PackageKitBaseBackend):
(version,release) = tuple(idver.split('-'))
return epoch,version,release
+ def _is_meta_package(self,id):
+ meta = None
+ if len(id.split(';')) > 1:
+ # Split up the id
+ (n,idver,a,d) = self.get_package_from_id(id)
+ if idver == 'meta' and a == 'meta' and d == 'meta':
+ meta = n
+ return meta
+
def _findPackage(self,id):
'''
find a package based on a package id (name;version;arch;repoid)
@@ -440,7 +456,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
# is this an real id or just an name
if len(id.split(';')) > 1:
# Split up the id
- (n,idver,a,d) = pkpackage.get_package_from_id(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:
@@ -818,7 +834,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
show = False
if show:
self._show_package(pkg,INFO_AVAILABLE)
-
+
@handle_repo_error
def install_packages(self,package_ids):
'''
@@ -833,16 +849,29 @@ class PackageKitYumBackend(PackageKitBaseBackend):
txmbrs = []
already_warned = False
for package in package_ids:
- pkg,inst = self._findPackage(package)
- if pkg and not inst:
- repo = self.yumbase.repos.getRepo(pkg.repoid)
- if not already_warned and not repo.gpgcheck:
- self.message(MESSAGE_UNTRUSTED_PACKAGE,"The untrusted package %s will be installed from %s." % (pkg.name, repo))
- already_warned = True
- txmbr = self.yumbase.install(po=pkg)
- txmbrs.extend(txmbr)
- if inst:
- self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package %s is already installed" % pkg.name)
+ meta = self._is_meta_package(package)
+ if meta:
+ txmbr = self.yumbase.selectGroup(meta)
+ if not txmbr:
+ self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This Group %s is already installed" % meta)
+ for t in txmbr:
+ repo = self.yumbase.repos.getRepo(t.po.repoid)
+ if not already_warned and not repo.gpgcheck:
+ self.message(MESSAGE_UNTRUSTED_PACKAGE,"The untrusted package %s will be installed from %s." % (t.po.name, repo))
+ already_warned = True
+
+ txmbrs.extend(txmbr)
+ else:
+ pkg,inst = self._findPackage(package)
+ if pkg and not inst:
+ repo = self.yumbase.repos.getRepo(pkg.repoid)
+ if not already_warned and not repo.gpgcheck:
+ self.message(MESSAGE_UNTRUSTED_PACKAGE,"The untrusted package %s will be installed from %s." % (pkg.name, repo))
+ already_warned = True
+ txmbr = self.yumbase.install(po=pkg)
+ txmbrs.extend(txmbr)
+ if inst:
+ self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package %s is already installed" % pkg.name)
if txmbrs:
self._runYumTransaction()
else:
@@ -1177,7 +1206,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
def _show_details_pkg(self,pkg):
pkgver = self._get_package_ver(pkg)
- id = pkpackage.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repo)
+ id = self.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repo)
desc = pkg.description
desc = desc.replace('\n\n',';')
desc = desc.replace('\n',' ')
@@ -1205,7 +1234,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
def _pkg_to_id(self,pkg):
pkgver = self._get_package_ver(pkg)
- id = pkpackage.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repo)
+ id = self.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repo)
return id
def _show_package(self,pkg,status):
@@ -1545,7 +1574,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.yumbase.repos.setCache(old_cache_setting)
def _setup_yum(self):
- self.yumbase.doConfigSetup(errorlevel=0,debuglevel=0) # Setup Yum Config
+ self.yumbase._getConfig(errorlevel=-1,debuglevel=-1) # Setup Yum Config
self.yumbase.conf.throttle = "90%" # Set bandwidth throttle to 40%
self.dnlCallback = DownloadCallback(self,showNames=True) # Download callback
self.yumbase.repos.setProgressBar(self.dnlCallback) # Setup the download callback class
@@ -1690,10 +1719,10 @@ class PackageKitCallback(RPMBaseCallback):
def _showName(self,status):
if type(self.curpkg) in types.StringTypes:
- id = pkpackage.get_package_id(self.curpkg,'','','')
+ id = self.get_package_id(self.curpkg,'','','')
else:
pkgver = self.base._get_package_ver(self.curpkg)
- id = pkpackage.get_package_id(self.curpkg.name,pkgver,self.curpkg.arch,self.curpkg.repo)
+ id = self.get_package_id(self.curpkg.name,pkgver,self.curpkg.arch,self.curpkg.repo)
self.base.package(id,status,"")
def event(self,package,action,te_current,te_total,ts_current,ts_total):
diff --git a/backends/yum/yumComps.py b/backends/yum/yumComps.py
old mode 100644
new mode 100755
index 4d0b34a..2ea2871
--- a/backends/yum/yumComps.py
+++ b/backends/yum/yumComps.py
@@ -185,33 +185,35 @@ groupMap = {
class yumComps:
- def __init__(self,yumbase):
+ def __init__(self,yumbase,db = None):
self.yumbase = yumbase
self.cursor = None
self.connection = None
+ if not db:
+ db = '/var/cache/yum/packagekit-groups-V2.sqlite'
+ self.db = db
def connect(self):
''' connect to database '''
- database = '/var/cache/yum/packagekit-groups.sqlite'
try:
# will be created if it does not exist
- self.connection = sqlite.connect(database)
+ self.connection = sqlite.connect(self.db)
self.cursor = self.connection.cursor()
except Exception, e:
- print 'cannot connect to database %s: %s' % (database,str(e))
+ print 'cannot connect to database %s: %s' % (self.db,str(e))
return False
# test if we can get a group for a common package, create if fail
try:
self.cursor.execute('SELECT group_enum FROM groups WHERE name = ?;',['hal'])
except Exception, e:
- self.cursor.execute('CREATE TABLE groups (name TEXT,category TEXT,group_enum TEXT);')
+ self.cursor.execute('CREATE TABLE groups (name TEXT,category TEXT,groupid TEXT,group_enum TEXT,pkgtype Text);')
self.refresh()
return True
- def _add_db(self,name,category,group):
- self.cursor.execute('INSERT INTO groups values(?,?,?);',(name,category,group))
+ def _add_db(self,name,category,groupid,pkgroup,pkgtype):
+ self.cursor.execute('INSERT INTO groups values(?,?,?,?,?);',(name,category,groupid,pkgroup,pkgtype))
def refresh(self,force=False):
''' get the data from yum (slow, REALLY SLOW) '''
@@ -220,8 +222,8 @@ class yumComps:
if self.yumbase.comps.compscount == 0:
return False
- # delete old data else we get multiple entries
- self.cursor.execute('DELETE FROM groups;')
+ # delete old data else we get multiple entries
+ self.cursor.execute('DELETE FROM groups;')
# store to sqlite
for category in cats:
@@ -242,11 +244,11 @@ class yumComps:
print 'unknown group enum',group_id
for package in group.mandatory_packages:
- self._add_db(package,group_id,group_enum)
+ self._add_db(package,category.categoryid,group_name,group_enum,'mandatory')
for package in group.default_packages:
- self._add_db(package,group_id,group_enum)
+ self._add_db(package,category.categoryid,group_name,group_enum,'default')
for package in group.optional_packages:
- self._add_db(package,group_id,group_enum)
+ self._add_db(package,category.categoryid,group_name,group_enum,'optional')
# write to disk
self.connection.commit()
@@ -269,3 +271,32 @@ class yumComps:
return group
+ def get_meta_package_list(self,groupid):
+ ''' for a comps group, get the packagelist for this group (mandatory,default)'''
+ all_packages = [];
+ self.cursor.execute('SELECT name FROM groups WHERE groupid = ? AND ( pkgtype = "mandatory" OR pkgtype = "default");',[groupid])
+ for row in self.cursor:
+ all_packages.append(row[0])
+ return all_packages
+
+if __name__ == "__main__":
+ import yum
+ import os
+ yb = yum.YumBase()
+ db = "packagekit-groupsV2.sqlite"
+ comps = yumComps(yb,db)
+ comps.connect()
+ comps.refresh()
+ print "pk group system"
+ print 40 * "="
+ pkgs = comps.get_package_list('system')
+ print pkgs
+ print "comps group games"
+ print 40 * "="
+ pkgs = comps.get_meta_package_list('games')
+ print pkgs
+ print "comps group kde-desktop"
+ print 40 * "="
+ pkgs = comps.get_meta_package_list('kde-desktop')
+ print pkgs
+ os.unlink(db) # kill the db
commit 31e5628c69661df9292d1de1923f16299041d3b2
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Sat Sep 13 10:22:26 2008 -0400
urpmi: added install-packages in dispatched backend
diff --git a/backends/urpmi/helpers/install-packages.pl b/backends/urpmi/helpers/install-packages.pl
index 2e55c3e..fe80b1f 100755
--- a/backends/urpmi/helpers/install-packages.pl
+++ b/backends/urpmi/helpers/install-packages.pl
@@ -47,4 +47,7 @@ urpm::select::search_packages($urpm, \%requested, \@names,
caseinsensitive => 0,
all => 0);
-perform_installation($urpm, \%requested);
+eval {
+ perform_installation($urpm, \%requested);
+};
+pk_print_status(PK_STATUS_ENUM_FINISHED);
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index fc068af..65442d7 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -21,7 +21,7 @@
# get-requires DONE
# get-update-detail DONE
# get-updates DONE
-# install-packages
+# install-packages DONE
# refresh-cache
# remove-packages
# resolve
@@ -282,7 +282,27 @@ sub get_updates {
}
sub install_packages {
- # TODO
+
+ my ($urpm, $packageids) = @_;
+
+ my @packageidstab = split(/\|/, $packageids);
+
+ my @names;
+ foreach(@packageidstab) {
+ my @pkg_id = (split(/;/, $_));
+ push @names, $pkg_id[0];
+ }
+
+ my %requested;
+
+ urpm::select::search_packages($urpm, \%requested, \@names,
+ fuzzy => 0,
+ caseinsensitive => 0,
+ all => 0);
+ eval {
+ perform_installation($urpm, \%requested);
+ };
+ _finished();
}
sub search_name {
diff --git a/backends/urpmi/helpers/urpmi_backend/actions.pm b/backends/urpmi/helpers/urpmi_backend/actions.pm
index 005bdcd..2400e47 100644
--- a/backends/urpmi/helpers/urpmi_backend/actions.pm
+++ b/backends/urpmi/helpers/urpmi_backend/actions.pm
@@ -90,7 +90,7 @@ sub perform_installation {
# Fix me
# Display message to prevent that the installation cannot continue because some
# packages has to be removed for others to be upgraded.
- exit 0;
+ die;
}
# Else, it's ok.
# Here we can display $list, which describe packages which has to be removed for
@@ -157,10 +157,9 @@ sub perform_installation {
},
bad_signature => sub {
pk_print_error(PK_ERROR_ENUM_GPG_FAILURE, "Bad or missing GPG signatures");
- pk_print_status(PK_STATUS_ENUM_FINISHED);
undef $lock;
undef $rpm_lock;
- exit 1;
+ die;
},
ask_yes_or_no => sub {
# Return 1 = Return Yes
@@ -173,7 +172,6 @@ sub perform_installation {
completed => sub {
undef $lock;
undef $rpm_lock;
- pk_print_status(PK_STATUS_ENUM_FINISHED);
},
post_download => sub {
# Fix me !
commit 002fd6277d3e7cdeb85b818cf720cab324b0d142
Author: Richard Hughes <richard at hughsie.com>
Date: Sat Sep 13 13:27:04 2008 +0100
dummy: make what-provides take some time, and also special case some codec names for a demo
diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index 5b04140..1b00355 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -30,6 +30,7 @@
static guint _progress_percentage = 0;
static gulong _signal_timeout = 0;
static gchar **_package_ids;
+static const gchar *_search;
static guint _package_current = 0;
static gboolean _has_service_pack = FALSE;
static gboolean _repo_enabled_local = FALSE;
@@ -807,19 +808,49 @@ backend_service_pack (PkBackend *backend, const gchar *location, gboolean enable
}
/**
+ * backend_what_provides_timeout:
+ */
+static gboolean
+backend_what_provides_timeout (gpointer data)
+{
+ PkBackend *backend = (PkBackend *) data;
+ if (_progress_percentage == 100) {
+ if (egg_strequal (_search, "gstreamer0.10(decoder-audio/x-wma)(wmaversion=3)")) {
+ pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE,
+ "gstreamer-plugins-bad;0.10.3-5.lvn;i386;available",
+ "GStreamer streaming media framework \"bad\" plug-ins");
+ } else if (egg_strequal (_search, "gstreamer0.10(decoder-video/x-wma)(wmaversion=3)")) {
+ pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE,
+ "gstreamer-plugins-flumpegdemux;0.10.15-5.lvn;i386;available",
+ "MPEG demuxer for GStreamer");
+ } else {
+ pk_backend_package (backend, PK_INFO_ENUM_INSTALLED,
+ "evince;0.9.3-5.fc8;i386;installed",
+ "PDF Document viewer");
+ pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE,
+ "scribus;1.3.4-1.fc8;i386;fedora",
+ "Scribus is an desktop open source page layout program");
+ }
+ pk_backend_finished (backend);
+ return FALSE;
+ }
+ _progress_percentage += 10;
+ pk_backend_set_percentage (backend, _progress_percentage);
+ return TRUE;
+}
+
+/**
* backend_what_provides:
*/
static void
backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, const gchar *search)
{
+ _progress_percentage = 0;
+ _search = search;
+ _signal_timeout = g_timeout_add (200, backend_what_provides_timeout, backend);
pk_backend_set_status (backend, PK_STATUS_ENUM_REQUEST);
- pk_backend_package (backend, PK_INFO_ENUM_INSTALLED,
- "evince;0.9.3-5.fc8;i386;installed",
- "PDF Document viewer");
- pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE,
- "scribus;1.3.4-1.fc8;i386;fedora",
- "Scribus is an desktop open source page layout program");
- pk_backend_finished (backend);
+ pk_backend_set_allow_cancel (backend, TRUE);
+ pk_backend_set_percentage (backend, _progress_percentage);
}
/**
commit f1a69a4fb691174004b9ec01931de345e4701a4e
Merge: 99d3daa... d30ad44...
Author: Richard Hughes <richard at hughsie.com>
Date: Sat Sep 13 13:03:27 2008 +0100
Merge branch 'master' of git+ssh://hughsie@git.packagekit.org/srv/git/PackageKit
commit d30ad4489f6b2db8d430b4938715d3e520e91ed9
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 11:59:40 2008 +0200
trivial: refactor name for translating
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index f5d7626..2fc7a35 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -772,15 +772,18 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
from smart.backends.deb.base import DebPackage
from smart.backends.slack.base import SlackPackage
if isinstance(package, RPMPackage):
+ name = package.name
version, arch = package.version.split('@')
elif isinstance(package, DebPackage):
+ name = package.name
version, arch = package.version, smart.backends.deb.base.DEBARCH
elif isinstance(package, SlackPackage):
+ name = package.name
ver, arch, rel = package.version.rsplit('-')
version = "%s-%s" % (ver, rel)
else:
version, arch = package.version, self._machine()
- return package.name, version, arch
+ return name, version, arch
def _joinpackage(self, name, version, arch):
if not self.systemchannel:
commit 54702536e48a5c4aa2c8da65d7e06290b6bc2b56
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:48:47 2008 +0200
trivial: add parent metapkg group
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index b7950d2..f5d7626 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -499,6 +499,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'System/GUI/Other' : GROUP_DESKTOP_OTHER,
'System/GUI/XFCE' : GROUP_DESKTOP_XFCE,
# YaST2
+# 'Virtual' : GROUP_META_PACKAGES,
'Virtual/Base Technologies' : GROUP_META_PACKAGES,
'Virtual/Desktop Functions' : GROUP_META_PACKAGES,
# 'Virtual/Development' : GROUP_META_PACKAGES,
commit c52faff48e9851ed2f2a8aa5e983aacf1ca4b38a
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:34:52 2008 +0200
trival: add FIXME for the groups lumped into OTHER
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 571201f..b7950d2 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -440,16 +440,16 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
# RPM (redhat)
'Amusements/Games' : GROUP_GAMES,
'Amusements/Graphics' : GROUP_GRAPHICS,
- 'Applications/Archiving' : GROUP_OTHER,
+ 'Applications/Archiving' : GROUP_OTHER, ### FIXME
'Applications/Communications' : GROUP_COMMUNICATION,
- 'Applications/Databases' : GROUP_OTHER,
+ 'Applications/Databases' : GROUP_OTHER, ### FIXME
'Applications/Editors' : GROUP_PUBLISHING,
- 'Applications/Emulators' : GROUP_OTHER,
- 'Applications/Engineering' : GROUP_OTHER,
- 'Applications/File' : GROUP_OTHER,
+ 'Applications/Emulators' : GROUP_OTHER, ### FIXME
+ 'Applications/Engineering' : GROUP_OTHER, ### FIXME
+ 'Applications/File' : GROUP_OTHER, ### FIXME
'Applications/Internet' : GROUP_INTERNET,
'Applications/Multimedia' : GROUP_MULTIMEDIA,
- 'Applications/Productivity' : GROUP_OTHER,
+ 'Applications/Productivity' : GROUP_OTHER, ### FIXME
'Applications/Publishing' : GROUP_PUBLISHING,
'Applications/System' : GROUP_SYSTEM,
'Applications/Text' : GROUP_PUBLISHING,
@@ -476,10 +476,10 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'Virtual/Languages' : GROUP_META_PACKAGES,
'Virtual/Servers' : GROUP_META_PACKAGES,
# RPM (novell)
- 'Productivity/Archiving' : GROUP_OTHER,
- 'Productivity/Databases' : GROUP_OTHER,
+ 'Productivity/Archiving' : GROUP_OTHER, ### FIXME
+ 'Productivity/Databases' : GROUP_OTHER, ### FIXME
'Productivity/Editors' : GROUP_PUBLISHING,
- 'Productivity/File utilities' : GROUP_OTHER,
+ 'Productivity/File utilities' : GROUP_OTHER, ### FIXME
'Productivity/Graphics' : GROUP_GRAPHICS,
'Productivity/Multimedia' : GROUP_MULTIMEDIA,
'Productivity/Networking' : GROUP_NETWORK,
commit 4379a648b67bb62401eeac64cc786087ba2a5aca
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:31:32 2008 +0200
trivial: unknown -> other
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 14481cd..571201f 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -476,15 +476,15 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'Virtual/Languages' : GROUP_META_PACKAGES,
'Virtual/Servers' : GROUP_META_PACKAGES,
# RPM (novell)
- 'Productivity/Archiving' : GROUP_UNKNOWN,
- 'Productivity/Databases' : GROUP_UNKNOWN,
+ 'Productivity/Archiving' : GROUP_OTHER,
+ 'Productivity/Databases' : GROUP_OTHER,
'Productivity/Editors' : GROUP_PUBLISHING,
- 'Productivity/File utilities' : GROUP_UNKNOWN,
+ 'Productivity/File utilities' : GROUP_OTHER,
'Productivity/Graphics' : GROUP_GRAPHICS,
'Productivity/Multimedia' : GROUP_MULTIMEDIA,
'Productivity/Networking' : GROUP_NETWORK,
'Productivity/Office' : GROUP_OFFICE,
- 'Productivity/Other' : GROUP_UNKNOWN,
+ 'Productivity/Other' : GROUP_OTHER,
'Productivity/Publishing' : GROUP_PUBLISHING,
'Productivity/Scientific' : GROUP_SCIENCE,
'Productivity/Security' : GROUP_SECURITY,
commit 5528d1a2fa457a5cb74c7acd0c8fff703e799f08
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:25:45 2008 +0200
trivial: add comments
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 1eb0e04..14481cd 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -437,7 +437,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
self.ctrl.saveSysConf()
GROUPS = {
- # RPM
+ # RPM (redhat)
'Amusements/Games' : GROUP_GAMES,
'Amusements/Graphics' : GROUP_GRAPHICS,
'Applications/Archiving' : GROUP_OTHER,
@@ -475,7 +475,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'Virtual/Development' : GROUP_META_PACKAGES,
'Virtual/Languages' : GROUP_META_PACKAGES,
'Virtual/Servers' : GROUP_META_PACKAGES,
- # RPM
+ # RPM (novell)
'Productivity/Archiving' : GROUP_UNKNOWN,
'Productivity/Databases' : GROUP_UNKNOWN,
'Productivity/Editors' : GROUP_PUBLISHING,
commit c488b9483ddd62a5a368bafb19398899958d4ed3
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:22:38 2008 +0200
smart: add desktop-xfce group
diff --git a/backends/smart/pk-backend-smart.c b/backends/smart/pk-backend-smart.c
index cd0f910..36e6e8f 100644
--- a/backends/smart/pk-backend-smart.c
+++ b/backends/smart/pk-backend-smart.c
@@ -69,6 +69,7 @@ backend_get_groups (PkBackend *backend)
PK_GROUP_ENUM_DESKTOP_GNOME,
PK_GROUP_ENUM_DESKTOP_KDE,
PK_GROUP_ENUM_DESKTOP_OTHER,
+ PK_GROUP_ENUM_DESKTOP_XFCE,
PK_GROUP_ENUM_DOCUMENTATION,
PK_GROUP_ENUM_ELECTRONICS,
PK_GROUP_ENUM_GAMES,
commit d43bdd5af883aa399855407a6a3ffb69c283680b
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:14:55 2008 +0200
smart: search for rpm subgroups, if no group matches
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index e8dffef..1eb0e04 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -385,11 +385,9 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
for package in packages:
if self._package_passes_filters(package, filters):
info = package.loaders.keys()[0].getInfo(package)
- group = info.getGroup()
- if group in self.GROUPS:
- group = self.GROUPS[group]
- if searchstring in group:
- self._add_package(package)
+ group = self._get_group(info)
+ if searchstring in group:
+ self._add_package(package)
self._post_process_package_list(filters)
self._show_package_list()
@@ -598,11 +596,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
else:
license = LICENSE_UNKNOWN
- group = info.getGroup()
- if group in self.GROUPS:
- group = self.GROUPS[group]
- else:
- group = GROUP_UNKNOWN
+ group = self._get_group(info)
self.details(packageid, license, group, description, url,
pkgsize)
@@ -860,6 +854,20 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
self.package(pkpackage.get_package_id(name, version, arch, data),
status, summary)
+ def _get_group(self, info):
+ group = info.getGroup()
+ if group in self.GROUPS:
+ group = self.GROUPS[group]
+ else:
+ while group.find('/') != -1:
+ group = group.rsplit('/', 1)[0]
+ if group in self.GROUPS:
+ group = self.GROUPS[group]
+ break
+ else:
+ group = GROUP_UNKNOWN
+ return group
+
def _get_status(self, package):
flags = smart.pkgconf.testAllFlags(package)
for flag in flags:
commit 37f631fb9cc32e5e82b9144add78188def2b3a37
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 10:00:14 2008 +0200
smart: add alternative groups from opensuse rpm
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 0cb822d..e8dffef 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -477,6 +477,29 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'Virtual/Development' : GROUP_META_PACKAGES,
'Virtual/Languages' : GROUP_META_PACKAGES,
'Virtual/Servers' : GROUP_META_PACKAGES,
+ # RPM
+ 'Productivity/Archiving' : GROUP_UNKNOWN,
+ 'Productivity/Databases' : GROUP_UNKNOWN,
+ 'Productivity/Editors' : GROUP_PUBLISHING,
+ 'Productivity/File utilities' : GROUP_UNKNOWN,
+ 'Productivity/Graphics' : GROUP_GRAPHICS,
+ 'Productivity/Multimedia' : GROUP_MULTIMEDIA,
+ 'Productivity/Networking' : GROUP_NETWORK,
+ 'Productivity/Office' : GROUP_OFFICE,
+ 'Productivity/Other' : GROUP_UNKNOWN,
+ 'Productivity/Publishing' : GROUP_PUBLISHING,
+ 'Productivity/Scientific' : GROUP_SCIENCE,
+ 'Productivity/Security' : GROUP_SECURITY,
+ 'Productivity/Text' : GROUP_PUBLISHING,
+ 'System/Base' : GROUP_SYSTEM,
+ 'System/Boot' : GROUP_SYSTEM,
+ 'System/Kernel' : GROUP_SYSTEM,
+ 'System/Libraries' : GROUP_SYSTEM,
+ 'System/Shells' : GROUP_SYSTEM,
+ 'System/GUI/GNOME' : GROUP_DESKTOP_GNOME,
+ 'System/GUI/KDE' : GROUP_DESKTOP_KDE,
+ 'System/GUI/Other' : GROUP_DESKTOP_OTHER,
+ 'System/GUI/XFCE' : GROUP_DESKTOP_XFCE,
# YaST2
'Virtual/Base Technologies' : GROUP_META_PACKAGES,
'Virtual/Desktop Functions' : GROUP_META_PACKAGES,
commit b2f2f028e4ec44ce8432c25d29b12ba531d97643
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Sat Sep 13 09:29:20 2008 +0200
smart: add yum/yast metapackages group
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index e4bc532..0cb822d 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -469,6 +469,22 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
'User Interface/Desktops' : GROUP_DESKTOP_OTHER,
'User Interface/X' : GROUP_DESKTOP_OTHER,
'User Interface/X Hardware Support' : GROUP_DESKTOP_OTHER,
+ # Yum
+ 'Virtual' : GROUP_META_PACKAGES,
+ 'Virtual/Applications' : GROUP_META_PACKAGES,
+ 'Virtual/Base System' : GROUP_META_PACKAGES,
+ 'Virtual/Desktop Environments' : GROUP_META_PACKAGES,
+ 'Virtual/Development' : GROUP_META_PACKAGES,
+ 'Virtual/Languages' : GROUP_META_PACKAGES,
+ 'Virtual/Servers' : GROUP_META_PACKAGES,
+ # YaST2
+ 'Virtual/Base Technologies' : GROUP_META_PACKAGES,
+ 'Virtual/Desktop Functions' : GROUP_META_PACKAGES,
+# 'Virtual/Development' : GROUP_META_PACKAGES,
+ 'Virtual/GNOME Desktop' : GROUP_META_PACKAGES,
+ 'Virtual/Graphical Environments' : GROUP_META_PACKAGES,
+ 'Virtual/KDE Desktop' : GROUP_META_PACKAGES,
+ 'Virtual/Server Functions' : GROUP_META_PACKAGES,
# DEB
"admin" : GROUP_ADMIN_TOOLS,
"base" : GROUP_SYSTEM,
diff --git a/backends/smart/pk-backend-smart.c b/backends/smart/pk-backend-smart.c
index 94bf176..cd0f910 100644
--- a/backends/smart/pk-backend-smart.c
+++ b/backends/smart/pk-backend-smart.c
@@ -76,6 +76,7 @@ backend_get_groups (PkBackend *backend)
PK_GROUP_ENUM_INTERNET,
PK_GROUP_ENUM_LEGACY,
PK_GROUP_ENUM_LOCALIZATION,
+ PK_GROUP_ENUM_META_PACKAGES,
PK_GROUP_ENUM_MULTIMEDIA,
PK_GROUP_ENUM_NETWORK,
PK_GROUP_ENUM_OTHER,
commit 522597ae75424e08f67e6ca259ee491c0c162793
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Fri Sep 12 20:31:31 2008 +0200
avoid KeyError when no extra deps
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 7a1003c..e4bc532 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -635,7 +635,8 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
if package and not extras.has_key(package):
extras[package] = True
- del extras[original]
+ if original in extras:
+ del extras[original]
for package in extras.keys():
if self._package_passes_filters(package, filters):
self._add_package(package)
@@ -669,7 +670,8 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
if package and not extras.has_key(package):
extras[package] = True
- del extras[original]
+ if original in extras:
+ del extras[original]
for package in extras.keys():
if self._package_passes_filters(package, filters):
self._add_package(package)
commit 1f2a53517c745e716fe0f077f93c8be38385c6c5
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Fri Sep 12 20:27:57 2008 +0200
smart: send more status updates when using dispatcher
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 58b3972..7a1003c 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -283,6 +283,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
@needs_cache
def update_system(self):
+ self.status(STATUS_INFO)
cache = self.ctrl.getCache()
trans = smart.transaction.Transaction(cache,
@@ -305,6 +306,7 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
@needs_cache
def get_updates(self, filters):
+ self.status(STATUS_INFO)
cache = self.ctrl.getCache()
trans = smart.transaction.Transaction(cache,
commit 6e47fab8dafecdbde6098c8d60556e5fd8c127ea
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Fri Sep 12 20:20:29 2008 +0200
resolve now takes array
diff --git a/backends/smart/helpers/resolve.py b/backends/smart/helpers/resolve.py
index fe2fff0..0d6b392 100755
--- a/backends/smart/helpers/resolve.py
+++ b/backends/smart/helpers/resolve.py
@@ -13,7 +13,9 @@
import sys
import smartBackend
+filters = sys.argv[1]
+packages = sys.argv[2:]
backend = smartBackend.PackageKitSmartBackend(sys.argv[2:])
-backend.resolve(sys.argv[1], sys.argv[2])
+backend.resolve(filters, packages)
sys.exit()
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 5a5a346..58b3972 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -327,13 +327,14 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
self._show_package_list()
@needs_cache
- def resolve(self, filters, packagename):
+ def resolve(self, filters, packages):
self.status(STATUS_QUERY)
self.allow_cancel(True)
- ratio, results, suggestions = self.ctrl.search(packagename)
- for result in results:
- if self._package_passes_filters(result, filters):
- self._add_package(result)
+ for packagename in packages:
+ ratio, results, suggestions = self.ctrl.search(packagename)
+ for result in results:
+ if self._package_passes_filters(result, filters):
+ self._add_package(result)
self._post_process_package_list(filters)
self._show_package_list()
commit 99d3daa22ce70bf95c9afe5388f032f8e9984b2c
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 16:52:43 2008 +0100
trivial: fix up whitespace in 701441d2b272ee12cda3f77c7eba0447aed96c1f
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 2ff44c6..1c4fb4f 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -489,7 +489,7 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe
gchar **argv;
gchar **envp;
#if PK_BUILD_LOCAL
- const gchar *directory;
+ const gchar *directory;
#endif
g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
@@ -503,9 +503,9 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe
#if PK_BUILD_LOCAL
/* prefer the local version */
- directory = backend_spawn->priv->name;
- if (g_str_has_prefix (directory, "test_"))
- directory = "test";
+ directory = backend_spawn->priv->name;
+ if (g_str_has_prefix (directory, "test_"))
+ directory = "test";
filename = g_build_filename ("..", "backends", directory, "helpers", argv[0], NULL);
if (g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE) {
commit 701441d2b272ee12cda3f77c7eba0447aed96c1f
Author: James Westby <jw+debian at jameswestby.net>
Date: Fri Sep 12 15:21:48 2008 +0100
bugfix: complete handling of local backend directory for test
In b6eeefd7a4730852436f24cc62370aadf811496c the local backend location for
tests was corrected to use "test", however the same needs to be done for
the helpers used in pk-backend-spawn.c
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index c59c646..2ff44c6 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -488,6 +488,9 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe
gchar *filename;
gchar **argv;
gchar **envp;
+#if PK_BUILD_LOCAL
+ const gchar *directory;
+#endif
g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
@@ -500,11 +503,15 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe
#if PK_BUILD_LOCAL
/* prefer the local version */
- filename = g_build_filename ("..", "backends", backend_spawn->priv->name, "helpers", argv[0], NULL);
+ directory = backend_spawn->priv->name;
+ if (g_str_has_prefix (directory, "test_"))
+ directory = "test";
+
+ filename = g_build_filename ("..", "backends", directory, "helpers", argv[0], NULL);
if (g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE) {
egg_debug ("local helper not found '%s'", filename);
g_free (filename);
- filename = g_build_filename ("..", "backends", backend_spawn->priv->name, argv[0], NULL);
+ filename = g_build_filename ("..", "backends", directory, argv[0], NULL);
}
if (g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE) {
egg_debug ("local helper not found '%s'", filename);
commit 8c5504bffac2ef1ff2f240695dfefacded7e48e5
Author: James Westby <jw+debian at jameswestby.net>
Date: Fri Sep 12 14:59:31 2008 +0100
Don't assume /bin/sh supports echo -e
backends/test/helpers/search-name.sh is uses echo -e to return tab-separated
values to the caller, but declares itself #!/bin/sh. If /bin/sh is dash
then the caller receives "-e package\t...", which is invalid.
diff --git a/backends/test/helpers/search-name.sh b/backends/test/helpers/search-name.sh
index 58ace84..271751d 100755
--- a/backends/test/helpers/search-name.sh
+++ b/backends/test/helpers/search-name.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
#
commit 163547429ebdd202708567de633c5fcbdf9cf085
Author: James Westby <jw+debian at jameswestby.net>
Date: Wed Sep 10 19:30:23 2008 +0100
apt: handle inconsistent source repo state.
If deb-src lines aren't available for every deb line then
softwareproperties will report it as inconsistent, with
None. The apt backend tried to pass this directly as
the "enabled" parameter, which fails as it should be able to
be considered an integer. We instead substitute False.
Thanks to Baptiste Mille-Mathias for reporting and testing.
diff --git a/backends/apt/aptDBUSBackend.py b/backends/apt/aptDBUSBackend.py
index 2cfe72d..79fe73b 100755
--- a/backends/apt/aptDBUSBackend.py
+++ b/backends/apt/aptDBUSBackend.py
@@ -827,7 +827,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
# Emit distro's virtual source code repositoriy
if not FILTER_NOT_DEVELOPMENT in filter_list:
repo_id = "%s_source" % repos.distro.id
- enabled = repos.get_source_code_state()
+ enabled = repos.get_source_code_state() or False
#FIXME: no translation :(
description = "%s %s - Source code" % (repos.distro.id,
repos.distro.release)
commit 9161d1593de87a2833eb11add2e13d11c762c89b
Merge: 84e46e3... f00306c...
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 17:52:30 2008 +0200
Merge branch 'master' of git+ssh://alk@git.packagekit.org/srv/git/PackageKit
commit 84e46e39c3afc4c3b03c62053f51536b40510e18
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 17:32:21 2008 +0200
urpmi: Added support for install-packages to install more than one package with one call
diff --git a/backends/urpmi/helpers/install-packages.pl b/backends/urpmi/helpers/install-packages.pl
index 73e6fad..2e55c3e 100755
--- a/backends/urpmi/helpers/install-packages.pl
+++ b/backends/urpmi/helpers/install-packages.pl
@@ -29,8 +29,10 @@ use urpmi_backend::tools;
# One or more arguments (Package ids)
exit if($#ARGV < 0);
+my @packageidstab = split(/\|/, $ARGV[0]);
+
my @names;
-foreach(@ARGV) {
+foreach(@packageidstab) {
my @pkg_id = (split(/;/, $_));
push @names, $pkg_id[0];
}
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index c050551..fc068af 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -89,6 +89,9 @@ while(<STDIN>) {
elsif($command eq "get-updates") {
get_updates($urpm, @args);
}
+ elsif($command eq "install-packages") {
+ install_packages($urpm, @args);
+ }
}
@@ -278,6 +281,10 @@ sub get_updates {
_finished();
}
+sub install_packages {
+ # TODO
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
commit 62479ae58a81e3dac0ecba180aa93257f8b74d7b
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 17:23:18 2008 +0200
urpmi: added get-updates in dispatched backend
diff --git a/backends/urpmi/helpers/get-updates.pl b/backends/urpmi/helpers/get-updates.pl
index 5dcf0d0..cb9b881 100755
--- a/backends/urpmi/helpers/get-updates.pl
+++ b/backends/urpmi/helpers/get-updates.pl
@@ -50,13 +50,7 @@ my $updates_descr = urpm::get_updates_description($urpm);
foreach(@to_install) {
my $updesc = $updates_descr->{URPM::pkg2media($urpm->{media}, $_)->{name}}{$_->name};
- if($updesc->{importance} eq "bugfix") {
- pk_print_package(INFO_BUGFIX, get_package_id($_), $_->summary);
- }
- elsif($updesc->{importance} eq "security") {
- pk_print_package(INFO_SECURITY, get_package_id($_), $_->summary);
- }
- else {
- pk_print_package(INFO_NORMAL, get_package_id($_), $_->summary);
- }
+ pk_print_package($updesc->{importance} eq "bugfix" ? INFO_BUGFIX :
+ $updesc->{importance} eq "security" ? INFO_SECURITY :
+ INFO_NORMAL, get_package_id($_), $_->summary);
}
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index 9004aae..c050551 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -20,7 +20,7 @@
# get-packages DONE
# get-requires DONE
# get-update-detail DONE
-# get-updates
+# get-updates DONE
# install-packages
# refresh-cache
# remove-packages
@@ -86,6 +86,9 @@ while(<STDIN>) {
elsif($command eq "get-update-detail") {
get_update_detail($urpm, @args);
}
+ elsif($command eq "get-updates") {
+ get_updates($urpm, @args);
+ }
}
@@ -246,6 +249,35 @@ sub get_update_detail {
_finished();
}
+sub get_updates {
+
+ my ($urpm, $filters) = @_;
+ # Fix me
+ # Filter are to be implemented.
+
+ pk_print_status(PK_STATUS_ENUM_DEP_RESOLVE);
+
+ my $state = {};
+ my %requested;
+ my $restart = urpm::select::resolve_dependencies($urpm, $state, \%requested,
+ auto_select => 1);
+
+ my %selected = %{$state->{selected} || {}};
+ my @ask_unselect = urpm::select::unselected_packages($urpm, $state);
+ my @to_remove = urpm::select::removed_packages($urpm, $state);
+ my @to_install = @{$urpm->{depslist}}[sort { $a <=> $b } keys %{$state->{selected}}];
+ @to_install = grep { $_->arch ne 'src' } @to_install;
+ my $updates_descr = urpm::get_updates_description($urpm);
+
+ foreach(@to_install) {
+ my $updesc = $updates_descr->{URPM::pkg2media($urpm->{media}, $_)->{name}}{$_->name};
+ pk_print_package($updesc->{importance} eq "bugfix" ? INFO_BUGFIX :
+ $updesc->{importance} eq "security" ? INFO_SECURITY :
+ INFO_NORMAL, get_package_id($_), $_->summary);
+ }
+ _finished();
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
commit f00306c60cdc1c7e92e7addfc61cc68c64607f4a
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date: Fri Sep 12 17:21:26 2008 +0200
smart: yet another groups typo
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 01d2b88..5a5a346 100755
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -437,8 +437,8 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
GROUPS = {
# RPM
- 'Amusement/Games' : GROUP_GAMES,
- 'Amusement/Graphics' : GROUP_GRAPHICS,
+ 'Amusements/Games' : GROUP_GAMES,
+ 'Amusements/Graphics' : GROUP_GRAPHICS,
'Applications/Archiving' : GROUP_OTHER,
'Applications/Communications' : GROUP_COMMUNICATION,
'Applications/Databases' : GROUP_OTHER,
commit 46c9dfdf88ad9b9713ad34074e28b5b7e9c32db9
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 17:16:59 2008 +0200
urpmi: added get-update-detail in dispatched backend
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index 92fad94..9004aae 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -19,7 +19,7 @@
# get-files DONE
# get-packages DONE
# get-requires DONE
-# get-update-detail
+# get-update-detail DONE
# get-updates
# install-packages
# refresh-cache
@@ -83,6 +83,9 @@ while(<STDIN>) {
elsif($command eq "get-requires") {
get_requires($urpm, @args);
}
+ elsif($command eq "get-update-detail") {
+ get_update_detail($urpm, @args);
+ }
}
@@ -230,6 +233,19 @@ sub get_requires {
_finished();
}
+sub get_update_detail {
+
+ my ($urpm, $packageids) = @_;
+
+ pk_print_status(PK_STATUS_ENUM_QUERY);
+ my @packageidstab = split(/\|/, $packageids);
+
+ foreach (@packageidstab) {
+ _print_package_update_details($urpm, $_);
+ }
+ _finished();
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
@@ -327,3 +343,42 @@ sub _print_package_files {
pk_print_files(get_package_id($pkg), join(';', @files));
}
+
+sub _print_package_update_details {
+
+ my ($urpm, $pkgid) = @_;
+ my $pkg = get_package_by_package_id($urpm, $pkgid);
+ $pkg or return;
+
+ my %requested;
+ $requested{$pkg->id} = 1;
+ my $state = {};
+ my $restart = urpm::select::resolve_dependencies($urpm, $state, \%requested);
+ my @ask_unselect = urpm::select::unselected_packages($urpm, $state);
+ my @to_remove = urpm::select::removed_packages($urpm, $state);
+ my @to_install = @{$urpm->{depslist}}[sort { $a <=> $b } keys %{$state->{selected}}];
+ my ($src, $binary) = partition { $_->arch eq 'src' } @to_install;
+ @to_install = @$binary;
+ my $updates_descr = urpm::get_updates_description($urpm);
+ my $updesc = $updates_descr->{URPM::pkg2media($urpm->{media}, $pkg)->{name}}{$pkg->name};
+ my $desc;
+ if($updesc) {
+ $desc = $updesc->{pre};
+ $desc =~ s/\n/;/g;
+ }
+
+ my @to_upgrade_pkids;
+ foreach(@to_install) {
+ my $pkid = get_installed_version_pkid($_);
+ push @to_upgrade_pkids, $pkid if $pkid;
+ }
+
+ pk_print_update_detail(get_package_id($pkg),
+ join("^", @to_upgrade_pkids),
+ join("^", map(fullname_to_package_id($_), @to_remove)),
+ "http://qa.mandriva.com",
+ "http://qa.mandriva.com",
+ "http://qa.mandriva.com",
+ $restart ? PK_RESTART_ENUM_SYSTEM : PK_RESTART_ENUM_APPLICATION,
+ $desc);
+}
commit e94c3bda7eb2fadae988e16a3753ed0cda59e610
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 16:10:30 2008 +0100
bugfix: only return the icon name in PkExtra if it's an icon name, and not an actual icon
diff --git a/libpackagekit/pk-extra.c b/libpackagekit/pk-extra.c
index 18683aa..f4d1b36 100644
--- a/libpackagekit/pk-extra.c
+++ b/libpackagekit/pk-extra.c
@@ -106,7 +106,12 @@ pk_extra_populate_package_cache_callback (void *data, gint argc, gchar **argv, g
if (egg_strequal (col, "package") && value != NULL) {
package = g_strdup (argv[i]);
} else if (egg_strequal (col, "icon") && value != NULL) {
- icon_name = g_strdup (argv[i]);
+ /* filter out icons that are not icon names, but files */
+ if (!egg_strzero (argv[i]) &&
+ !g_str_has_suffix (argv[i], ".xpm") &&
+ !g_str_has_suffix (argv[i], ".png") &&
+ !g_str_has_suffix (argv[i], ".svg"))
+ icon_name = g_strdup (argv[i]);
} else if (egg_strequal (col, "exec") && value != NULL) {
exec = g_strdup (argv[i]);
}
commit 78629c58cf6670ef90afb63b5c20ad93796445b1
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 16:09:50 2008 +0100
trivial: fix the fedora spec file
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 72a5e0c..ca0a09e 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -195,6 +195,7 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
%{_datadir}/man/man1/*.1.gz
%{_datadir}/PolicyKit/policy/*.policy
%{_datadir}/mime/packages/packagekit-*.xml
+%{_datadir}/PackageKit/pk-upgrade-distro.sh
%{_sbindir}/packagekitd
%{_bindir}/pkmon
%{_bindir}/pkcon
commit 916d9ad4e699fca167429fcd117fa54ad5bde8c8
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 16:58:13 2008 +0200
urpmi: added get-requires in dispatched backend
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index abfea65..92fad94 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -18,7 +18,7 @@
# get-distro-upgrades
# get-files DONE
# get-packages DONE
-# get-requires
+# get-requires DONE
# get-update-detail
# get-updates
# install-packages
@@ -44,6 +44,7 @@ use urpm::media;
use urpm::args;
use urpm::select;
+use urpmi_backend::actions;
use urpmi_backend::open_db;
use urpmi_backend::tools;
use urpmi_backend::filters;
@@ -79,6 +80,9 @@ while(<STDIN>) {
elsif($command eq "get-packages") {
get_packages($urpm, @args);
}
+ elsif($command eq "get-requires") {
+ get_requires($urpm, @args);
+ }
}
@@ -196,6 +200,36 @@ sub get_packages {
_finished();
}
+sub get_requires {
+
+ my ($urpm, $filters, $packageids, $recursive_option) = @_;
+
+ my @filterstab = split(/;/, $filters);
+ my @packageidstab = split(/\|/, $packageids);
+ my $recursive = $recursive_option eq "yes" ? 1 : 0;
+
+ my @pkgnames;
+ foreach (@packageidstab) {
+ my $pkg = get_package_by_package_id($urpm, $_);
+ $pkg and push(@pkgnames, $pkg->name);
+ }
+
+ pk_print_status(PK_STATUS_ENUM_DEP_RESOLVE);
+ my @requires = perform_requires_search($urpm, \@pkgnames, $recursive);
+
+ foreach(@requires) {
+ if(filter($_, \@filterstab, { FILTER_GUI => 1, FILTER_DEVELOPMENT => 1 })) {
+ if(package_version_is_installed($_)) {
+ grep(/^${\FILTER_NOT_INSTALLED}$/, @filterstab) or pk_print_package(INFO_INSTALLED, get_package_id($_), $_->summary);
+ }
+ else {
+ grep(/^${\FILTER_INSTALLED}$/, @filterstab) or pk_print_package(INFO_AVAILABLE, get_package_id($_), $_->summary);
+ }
+ }
+ }
+ _finished();
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
commit 7de3bbbd5d73a2545a8d83fa8e89ca470a3fbbd6
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 16:45:09 2008 +0200
urpmi: some status print added
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index ac28ba3..abfea65 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -142,7 +142,6 @@ sub get_details {
my ($urpm, $packageids) = @_;
my @packageidstab = split(/\|/, $packageids);
-
pk_print_status(PK_STATUS_ENUM_QUERY);
foreach (@packageidstab) {
@@ -156,11 +155,12 @@ sub get_files {
my ($urpm, $packageids) = @_;
my @packageidstab = split(/\|/, $packageids);
+ pk_print_status(PK_STATUS_ENUM_QUERY);
foreach (@packageidstab) {
_print_package_files($urpm, $_);
}
-
+ _finished();
}
sub get_packages {
@@ -168,6 +168,8 @@ sub get_packages {
my ($urpm, $filters) = @_;
my @filterstab = split(/;/, $filters);
+ pk_print_status(PK_STATUS_ENUM_QUERY);
+
my $db = open_rpm_db();
$urpm->compute_installed_flags($db);
@@ -191,6 +193,7 @@ sub get_packages {
}
}
}
+ _finished();
}
sub search_name {
commit d87ed1830bb0b606aa4a8db181f41eb0980ba8f8
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 16:42:44 2008 +0200
urpmi: added get-packages in dispatched backend
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index 12faa18..ac28ba3 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -17,7 +17,7 @@
# get-details DONE
# get-distro-upgrades
# get-files DONE
-# get-packages
+# get-packages DONE
# get-requires
# get-update-detail
# get-updates
@@ -76,6 +76,9 @@ while(<STDIN>) {
elsif($command eq "get-files") {
get_files($urpm, @args);
}
+ elsif($command eq "get-packages") {
+ get_packages($urpm, @args);
+ }
}
@@ -160,6 +163,36 @@ sub get_files {
}
+sub get_packages {
+
+ my ($urpm, $filters) = @_;
+ my @filterstab = split(/;/, $filters);
+
+ my $db = open_rpm_db();
+ $urpm->compute_installed_flags($db);
+
+ # Here we display installed packages
+ if(not grep(/^${\FILTER_NOT_INSTALLED}$/, @filterstab)) {
+ $db->traverse(sub {
+ my ($pkg) = @_;
+ if(filter($pkg, \@filterstab, {FILTER_DEVELOPMENT => 1, FILTER_GUI => 1})) {
+ pk_print_package(INFO_INSTALLED, get_package_id($pkg), ensure_utf8($pkg->summary));
+ }
+ });
+ }
+
+ # Here are package which can be installed
+ if(not grep(/^${\FILTER_INSTALLED}$/, @filterstab)) {
+ foreach my $pkg(@{$urpm->{depslist}}) {
+ if($pkg->flag_upgrade) {
+ if(filter($pkg, \@filterstab, {FILTER_DEVELOPMENT => 1, FILTER_GUI => 1})) {
+ pk_print_package(INFO_AVAILABLE, get_package_id($pkg), ensure_utf8($pkg->summary));
+ }
+ }
+ }
+ }
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
commit 4f3b331ad7c1c6bb5d0668436146909e32be862d
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 16:33:44 2008 +0200
urpmi: added get-files in dispatched backend
diff --git a/backends/urpmi/helpers/get-distro-upgrades.pl b/backends/urpmi/helpers/get-distro-upgrades.pl
index e81ef3f..137cf1d 100755
--- a/backends/urpmi/helpers/get-distro-upgrades.pl
+++ b/backends/urpmi/helpers/get-distro-upgrades.pl
@@ -41,6 +41,7 @@ while(<DISTRIB_FILE>) {
my %distrib = parse_line($_);
push(@distribs, \%distrib);
}
+close(DISTRIB_FILE);
my $distrib;
foreach (@distribs) {
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index e61e591..12faa18 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -16,7 +16,7 @@
# get-depends DONE
# get-details DONE
# get-distro-upgrades
-# get-files
+# get-files DONE
# get-packages
# get-requires
# get-update-detail
@@ -31,7 +31,6 @@
# search-name DONE
# update-packages
# update-system
-# urpmi-dispatched-backend
#
use strict;
@@ -74,6 +73,9 @@ while(<STDIN>) {
elsif($command eq "get-details") {
get_details($urpm, @args);
}
+ elsif($command eq "get-files") {
+ get_files($urpm, @args);
+ }
}
@@ -146,6 +148,18 @@ sub get_details {
_finished();
}
+sub get_files {
+
+ my ($urpm, $packageids) = @_;
+
+ my @packageidstab = split(/\|/, $packageids);
+
+ foreach (@packageidstab) {
+ _print_package_files($urpm, $_);
+ }
+
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
@@ -222,3 +236,24 @@ sub _print_package_details {
pk_print_details(get_package_id($pkg), "N/A", $pkg->group, ensure_utf8($description), "N/A", $pkg->size);
}
+
+sub _print_package_files {
+
+ my ($urpm, $pkgid) = @_;
+
+ my $pkg = get_package_by_package_id($urpm, $pkgid);
+ $pkg or return;
+
+ my $medium = pkg2medium($pkg, $urpm);
+ my $xml_info = 'files';
+ my $xml_info_file = urpm::media::any_xml_info($urpm, $medium, $xml_info, undef, undef);
+ require urpm::xml_info;
+ require urpm::xml_info_pkg;
+ my $name = urpm_name($pkg);
+ my %nodes = eval { urpm::xml_info::get_nodes($xml_info, $xml_info_file, [ $name ]) };
+ my %xml_info_pkgs;
+ put_in_hash($xml_info_pkgs{$name} ||= {}, $nodes{$name});
+ my @files = map { chomp_($_) } split("\n", $xml_info_pkgs{$name}{files});
+
+ pk_print_files(get_package_id($pkg), join(';', @files));
+}
commit 57304f03af41727bcc8c88912cc30681b955e221
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 15:28:23 2008 +0100
trivial: dist upgradescript_SCRIPTS
diff --git a/data/Makefile.am b/data/Makefile.am
index d360476..4668de1 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -85,6 +85,7 @@ EXTRA_DIST = \
$(mime_in_files) \
$(localcache_DATA) \
$(database_DATA) \
+ $(upgradescript_SCRIPTS) \
$(NULL)
clean-local:
commit 3f72e0075b56b6b65acfeed444371fce568a6fd1
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 15:26:28 2008 +0100
trivial: fix build failure with ndef PK_BUILD_LOCAL
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 8b469a3..ed5ccb9 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -530,14 +530,14 @@ pk_backend_build_library_path (PkBackend *backend, const gchar *name)
{
gchar *path;
gchar *filename;
+#if PK_BUILD_LOCAL
const gchar *directory;
-
+#endif
g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
g_return_val_if_fail (name != NULL, NULL);
filename = g_strdup_printf ("libpk_backend_%s.so", name);
#if PK_BUILD_LOCAL
-
/* test_spawn, test_dbus, test_fail, etc. are in the 'test' folder */
directory = name;
if (g_str_has_prefix (name, "test_"))
commit 3ef34f6d7bad899c76cc7af21969687384b4045d
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 16:21:56 2008 +0200
urpmi: added get-details in dispatched backend
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index 1ed600d..e61e591 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -14,7 +14,7 @@
# Dispatched backend implementation progress
#
# get-depends DONE
-# get-details
+# get-details DONE
# get-distro-upgrades
# get-files
# get-packages
@@ -52,6 +52,8 @@ use urpmi_backend::filters;
use perl_packagekit::enums;
use perl_packagekit::prints;
+use MDK::Common;
+
BEGIN {
push @INC, dirname($0);
}
@@ -69,6 +71,9 @@ while(<STDIN>) {
elsif($command eq "get-depends") {
get_depends($urpm, @args);
}
+ elsif($command eq "get-details") {
+ get_details($urpm, @args);
+ }
}
@@ -127,9 +132,25 @@ sub get_depends {
_finished();
}
+sub get_details {
+
+ my ($urpm, $packageids) = @_;
+
+ my @packageidstab = split(/\|/, $packageids);
+
+ pk_print_status(PK_STATUS_ENUM_QUERY);
+
+ foreach (@packageidstab) {
+ _print_package_details($urpm, $_);
+ }
+ _finished();
+}
+
sub search_name {
my ($urpm, $filters, $search_term) = @_;
+
+ pk_print_status(PK_STATUS_ENUM_QUERY);
my @filterstab = split(/;/, $filters);
@@ -138,7 +159,6 @@ sub search_name {
my $db = open_rpm_db();
$urpm->compute_installed_flags($db);
- $db->close();
# Here we display installed packages
if(not grep(/^${\FILTER_NOT_INSTALLED}$/, @filterstab)) {
@@ -173,3 +193,32 @@ sub search_name {
sub _finished {
pk_print_status(PK_STATUS_ENUM_FINISHED);
}
+
+sub _print_package_details {
+
+ my ($urpm, $pkgid) = @_;
+
+ my $pkg = get_package_by_package_id($urpm, $pkgid);
+ $pkg or return;
+
+ my $medium = pkg2medium($pkg, $urpm);
+ my $xml_info = 'info';
+ my $xml_info_file = urpm::media::any_xml_info($urpm, $medium, $xml_info, undef, undef);
+
+ if(!$xml_info_file) {
+ pk_print_details(get_package_id($pkg), "N/A", $pkg->group, "N/A", "N/A", 0);
+ return;
+ }
+
+ require urpm::xml_info;
+ require urpm::xml_info_pkg;
+ my $name = urpm_name($pkg);
+ my %nodes = eval { urpm::xml_info::get_nodes($xml_info, $xml_info_file, [ $name ]) };
+ my %xml_info_pkgs;
+ put_in_hash($xml_info_pkgs{$name} ||= {}, $nodes{$name});
+ my $description = $xml_info_pkgs{$name}{description};
+ $description =~ s/\n/;/g;
+ $description =~ s/\t/ /g;
+
+ pk_print_details(get_package_id($pkg), "N/A", $pkg->group, ensure_utf8($description), "N/A", $pkg->size);
+}
commit 2115874a21dcc33fa2eb20e4e1d72cc8838d834e
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date: Fri Sep 12 16:11:05 2008 +0200
urpmi: dispatched backend implementation starts
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
new file mode 100755
index 0000000..1ed600d
--- /dev/null
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -0,0 +1,175 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2008 Aurelien Lefebvre <alefebvre at mandriva.com>
+#
+# 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.
+#
+
+#
+# Dispatched backend implementation progress
+#
+# get-depends DONE
+# get-details
+# get-distro-upgrades
+# get-files
+# get-packages
+# get-requires
+# get-update-detail
+# get-updates
+# install-packages
+# refresh-cache
+# remove-packages
+# resolve
+# search-details
+# search-file
+# search-group
+# search-name DONE
+# update-packages
+# update-system
+# urpmi-dispatched-backend
+#
+
+use strict;
+
+use lib;
+use File::Basename;
+
+use URPM;
+use urpm;
+use urpm::media;
+use urpm::args;
+use urpm::select;
+
+use urpmi_backend::open_db;
+use urpmi_backend::tools;
+use urpmi_backend::filters;
+
+use perl_packagekit::enums;
+use perl_packagekit::prints;
+
+BEGIN {
+ push @INC, dirname($0);
+}
+
+my $urpm = urpm->new_parse_cmdline;
+urpm::media::configure($urpm);
+
+while(<STDIN>) {
+ chomp($_);
+ my @args = split (/ /, $_);
+ my $command = shift(@args);
+ if($command eq "search-name") {
+ search_name($urpm, @args);
+ }
+ elsif($command eq "get-depends") {
+ get_depends($urpm, @args);
+ }
+}
+
+
+
+sub get_depends {
+
+ my ($urpm, $filters, $packageids, $recursive_option) = @_;
+
+ my @filterstab = split(/;/, $filters);
+ my @packageidstab = split(/\|/, $packageids);
+ $recursive_option = 1;
+
+ pk_print_status(PK_STATUS_ENUM_DEP_RESOLVE);
+
+ my @pkgnames;
+ foreach (@packageidstab) {
+ my @pkgid = split(/;/, $_);
+ push(@pkgnames, $pkgid[0]);
+ }
+
+ my %requested;
+ my $results = urpm::select::search_packages($urpm, \%requested, \@pkgnames,
+ fuzzy => 0,
+ caseinsensitive => 0,
+ all => 0
+ );
+
+ $results
+ or (_finished() and return);
+
+ my $empty_db = new URPM;
+ my $state = {};
+ $urpm->resolve_requested($empty_db,
+ $state,
+ \%requested,
+ );
+
+ my $db = open_rpm_db();
+ $urpm->compute_installed_flags($db);
+
+ my %selected = %{$state->{selected}};
+ my @selected_keys = keys %selected;
+ my @depslist = @{$urpm->{depslist}};
+
+ foreach(sort {@depslist[$b]->flag_installed <=> @depslist[$a]->flag_installed} @selected_keys) {
+ my $pkg = @depslist[$_];
+ if($pkg->flag_installed) {
+ grep(/^${\FILTER_NOT_INSTALLED}$/, @filterstab) and next;
+ pk_print_package(INFO_INSTALLED, get_package_id($pkg), $pkg->summary);
+ }
+ else {
+ grep(/^${\FILTER_INSTALLED}$/, @filterstab) and next;
+ pk_print_package(INFO_AVAILABLE, get_package_id($pkg), $pkg->summary);
+ }
+ }
+ _finished();
+}
+
+sub search_name {
+
+ my ($urpm, $filters, $search_term) = @_;
+
+ my @filterstab = split(/;/, $filters);
+
+ my $basename_option = FILTER_BASENAME;
+ $basename_option = grep(/$basename_option/, @filterstab);
+
+ my $db = open_rpm_db();
+ $urpm->compute_installed_flags($db);
+ $db->close();
+
+ # Here we display installed packages
+ if(not grep(/^${\FILTER_NOT_INSTALLED}$/, @filterstab)) {
+ $db->traverse(sub {
+ my ($pkg) = @_;
+ if(filter($pkg, \@filterstab, {FILTER_DEVELOPMENT => 1, FILTER_GUI => 1})) {
+ if( (!$basename_option && $pkg->name =~ /$search_term/)
+ || $pkg->name =~ /^$search_term$/ ) {
+ pk_print_package(INFO_INSTALLED, get_package_id($pkg), ensure_utf8($pkg->summary));
+ }
+ }
+ });
+ }
+
+ # Here are packages which can be installed
+ grep(/^${\FILTER_INSTALLED}$/, @filterstab)
+ and _finished()
+ and return;
+
+ foreach my $pkg(@{$urpm->{depslist}}) {
+ if($pkg->flag_upgrade && filter($pkg, \@filterstab, {FILTER_DEVELOPMENT => 1, FILTER_GUI => 1})) {
+ if( (!$basename_option && $pkg->name =~ /$search_term/)
+ || $pkg->name =~ /^$search_term$/ ) {
+ pk_print_package(INFO_AVAILABLE, get_package_id($pkg), ensure_utf8($pkg->summary));
+ }
+ }
+ }
+
+ _finished();
+}
+
+sub _finished {
+ pk_print_status(PK_STATUS_ENUM_FINISHED);
+}
commit b6eeefd7a4730852436f24cc62370aadf811496c
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 14:57:12 2008 +0100
bugfix: when we are using the test backends, allow use to reference them without doing make install when PK_BUILD_LOCAL is set
diff --git a/src/pk-backend.c b/src/pk-backend.c
index d6f147b..8b469a3 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -530,14 +530,21 @@ pk_backend_build_library_path (PkBackend *backend, const gchar *name)
{
gchar *path;
gchar *filename;
+ const gchar *directory;
g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
g_return_val_if_fail (name != NULL, NULL);
filename = g_strdup_printf ("libpk_backend_%s.so", name);
#if PK_BUILD_LOCAL
+
+ /* test_spawn, test_dbus, test_fail, etc. are in the 'test' folder */
+ directory = name;
+ if (g_str_has_prefix (name, "test_"))
+ directory = "test";
+
/* prefer the local version */
- path = g_build_filename ("..", "backends", name, ".libs", filename, NULL);
+ path = g_build_filename ("..", "backends", directory, ".libs", filename, NULL);
if (g_file_test (path, G_FILE_TEST_EXISTS) == FALSE) {
egg_debug ("local backend not found '%s'", path);
g_free (path);
commit b144bc0b882f6e11a2075a444857b2c2124613ce
Author: Richard Hughes <richard at hughsie.com>
Date: Fri Sep 12 14:30:58 2008 +0100
feature: add pk-upgrade-distro.sh so we can actually do the distro upgrade action
diff --git a/data/Makefile.am b/data/Makefile.am
index 07dc239..d360476 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -19,6 +19,9 @@ crondata_SCRIPTS = packagekit-background
pmutilsdir = $(libdir)/pm-utils/sleep.d
pmutils_DATA = 95packagekit
+upgradescriptdir = $(datadir)/PackageKit
+upgradescript_SCRIPTS = pk-upgrade-distro.sh
+
if BACKEND_TYPE_APT
aptconfdir = ${SYSCONFDIR}/apt.conf.d
aptconf_DATA = 20packagekit
diff --git a/data/pk-upgrade-distro.sh b/data/pk-upgrade-distro.sh
new file mode 100755
index 0000000..670e781
--- /dev/null
+++ b/data/pk-upgrade-distro.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+# Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
+#
+# This file is designed to be run by a not privileged user, NOT ROOT.
+# The tool which is invoked will have to use consolehelper or PolicyKit
+# if privileged changes are required.
+#
+# 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.
+
+# Fedora uses preupgrade
+if [ -e /etc/fedora-release ]; then
+ if [ -e /usr/bin/preupgrade ]; then
+ /usr/bin/preupgrade
+ else
+ xdg-open http://fedoraproject.org/en/get-fedora
+ fi
+else
+ # do not dep on zenity in build scripts
+ zenity --warning --title "System is not recognised" \
+ --text "Your distribution was not recognised by the upgrade script.\nPlease file a but in your distribution bug tracker under the component PackageKit."
+fi
+
More information about the PackageKit-commit
mailing list