2008-09-30 12:09:38 -07:00
|
|
|
#!/usr/bin/python
|
2007-10-23 05:27:50 -07:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; if not, write to the Free Software
|
|
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
#
|
|
|
|
# Copyright (C) 2007 S.Çağlar Onur <caglar@pardus.org.tr>
|
|
|
|
|
|
|
|
import pisi
|
|
|
|
from packagekit.backend import *
|
2008-09-30 12:09:38 -07:00
|
|
|
from packagekit.package import PackagekitPackage
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
class PackageKitPisiBackend(PackageKitBaseBackend, PackagekitPackage):
|
2007-10-23 16:21:40 -07:00
|
|
|
|
2007-11-01 00:47:37 -07:00
|
|
|
# It's an ugly way to sync with PK Groups and PiSi Components
|
|
|
|
# Maybe we can provide these with our index?
|
|
|
|
groups = {
|
2007-11-02 07:41:42 -07:00
|
|
|
"applications" : GROUP_OTHER,
|
2007-11-01 00:47:37 -07:00
|
|
|
"applications.admin" : GROUP_ADMIN_TOOLS,
|
2007-11-02 07:41:42 -07:00
|
|
|
"applications.archive" : GROUP_OTHER,
|
2007-11-01 00:47:37 -07:00
|
|
|
"applications.crypto" : GROUP_SECURITY,
|
|
|
|
"applications.doc" : GROUP_PUBLISHING,
|
|
|
|
"applications.doc.docbook" : GROUP_PUBLISHING,
|
|
|
|
"applications.editors" : GROUP_ACCESSORIES,
|
|
|
|
"applications.editors.emacs" : GROUP_ACCESSORIES,
|
2007-11-02 07:41:42 -07:00
|
|
|
"applications.emulators" : GROUP_OTHER,
|
|
|
|
"applications.filesystems" : GROUP_OTHER,
|
2007-11-01 00:47:37 -07:00
|
|
|
"applications.games" : GROUP_GAMES,
|
2007-11-02 07:41:42 -07:00
|
|
|
"applications.hardware" : GROUP_OTHER,
|
2007-11-01 00:47:37 -07:00
|
|
|
"applications.multimedia" : GROUP_MULTIMEDIA,
|
|
|
|
"applications.network" : GROUP_INTERNET,
|
|
|
|
"applications.network.mozilla" : GROUP_INTERNET,
|
|
|
|
"applications.pda" : GROUP_ACCESSORIES,
|
2007-11-02 07:41:42 -07:00
|
|
|
"applications.powermanagement" : GROUP_POWER_MANAGEMENT,
|
2007-11-01 00:47:37 -07:00
|
|
|
"applications.printing" : GROUP_PUBLISHING,
|
|
|
|
"applications.science" : GROUP_EDUCATION,
|
|
|
|
"applications.science.astronomy" : GROUP_EDUCATION,
|
|
|
|
"applications.science.electronics" : GROUP_EDUCATION,
|
|
|
|
"applications.science.mathematics" : GROUP_EDUCATION,
|
|
|
|
"applications.security" : GROUP_SECURITY,
|
2007-11-02 07:41:42 -07:00
|
|
|
"applications.shells" : GROUP_OTHER,
|
2007-11-01 00:47:37 -07:00
|
|
|
"applications.tex" : GROUP_PUBLISHING,
|
|
|
|
"applications.util" : GROUP_ACCESSORIES,
|
|
|
|
"applications.virtualization" : GROUP_VIRTUALIZATION,
|
|
|
|
"desktop.fonts" : GROUP_FONTS,
|
2007-11-03 01:41:04 -07:00
|
|
|
"desktop.freedesktop" : GROUP_DESKTOP_OTHER,
|
2007-11-01 00:47:37 -07:00
|
|
|
"desktop.freedesktop.inputmethods" : GROUP_LOCALIZATION,
|
2007-11-03 01:41:04 -07:00
|
|
|
"desktop.freedesktop.xorg" : GROUP_DESKTOP_OTHER,
|
|
|
|
"desktop.freedesktop.xorg.lib" : GROUP_DESKTOP_OTHER,
|
|
|
|
"desktop.gnome" : GROUP_DESKTOP_GNOME,
|
|
|
|
"desktop.kde" : GROUP_DESKTOP_KDE,
|
|
|
|
"desktop.kde.base" : GROUP_DESKTOP_KDE,
|
2007-11-01 00:47:37 -07:00
|
|
|
"desktop.kde.i18n" : GROUP_LOCALIZATION,
|
|
|
|
"kernel" : GROUP_SYSTEM,
|
|
|
|
"kernel.drivers" : GROUP_SYSTEM,
|
|
|
|
"kernel.firmware" : GROUP_SYSTEM,
|
|
|
|
"kernel-xen" : GROUP_VIRTUALIZATION,
|
|
|
|
"kernel-xen.dom0" : GROUP_VIRTUALIZATION,
|
|
|
|
"kernel-xen.dom0.drivers" : GROUP_VIRTUALIZATION,
|
|
|
|
"kernel-xen.dom0.firmware" : GROUP_VIRTUALIZATION,
|
|
|
|
"kernel-xen.domU" : GROUP_VIRTUALIZATION,
|
|
|
|
"programming" : GROUP_PROGRAMMING,
|
|
|
|
"programming.environments" : GROUP_PROGRAMMING,
|
|
|
|
"programming.environments.eclipse" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.dotnet" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.gambas" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.haskell" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.java" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.lisp" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.pascal" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.perl" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.php" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.python" : GROUP_PROGRAMMING,
|
|
|
|
"programming.languages.tcl" : GROUP_PROGRAMMING,
|
|
|
|
"programming.libs" : GROUP_PROGRAMMING,
|
|
|
|
"programming.tools" : GROUP_PROGRAMMING,
|
|
|
|
"server" : GROUP_SERVERS,
|
|
|
|
"server.database" : GROUP_SERVERS,
|
|
|
|
"server.mail" : GROUP_SERVERS,
|
|
|
|
"server.nis" : GROUP_SERVERS,
|
|
|
|
"server.www" : GROUP_SERVERS,
|
|
|
|
"system" : GROUP_SYSTEM,
|
|
|
|
"system.base" : GROUP_SYSTEM,
|
|
|
|
"system.devel" : GROUP_PROGRAMMING,
|
|
|
|
"system.doc" : GROUP_SYSTEM,
|
|
|
|
"system.locale" : GROUP_LOCALIZATION
|
|
|
|
}
|
|
|
|
|
2007-10-23 05:27:50 -07:00
|
|
|
def __init__(self, args):
|
|
|
|
PackageKitBaseBackend.__init__(self, args)
|
|
|
|
|
|
|
|
self.componentdb = pisi.db.componentdb.ComponentDB()
|
2007-10-30 07:44:39 -07:00
|
|
|
self.filesdb = pisi.db.filesdb.FilesDB()
|
2007-10-30 00:39:26 -07:00
|
|
|
self.installdb = pisi.db.installdb.InstallDB()
|
2007-10-23 05:27:50 -07:00
|
|
|
self.packagedb = pisi.db.packagedb.PackageDB()
|
|
|
|
self.repodb = pisi.db.repodb.RepoDB()
|
|
|
|
|
2007-11-01 00:47:37 -07:00
|
|
|
# Do not ask any question to users
|
|
|
|
self.options = pisi.config.Options()
|
|
|
|
self.options.yes_all = True
|
|
|
|
|
2007-10-23 16:21:40 -07:00
|
|
|
def __get_package_version(self, package):
|
|
|
|
""" Returns version string of given package """
|
|
|
|
# Internal FIXME: PiSi may provide this
|
|
|
|
if package.build is not None:
|
|
|
|
version = "%s-%s-%s" % (package.version, package.release, package.build)
|
2007-10-23 13:50:48 -07:00
|
|
|
else:
|
2007-10-23 16:21:40 -07:00
|
|
|
version = "%s-%s" % (package.version, package.release)
|
2007-10-23 13:50:48 -07:00
|
|
|
return version
|
|
|
|
|
2007-10-30 01:58:11 -07:00
|
|
|
def __get_package(self, package, filters = None):
|
2007-10-23 16:21:40 -07:00
|
|
|
""" Returns package object suitable for other methods """
|
|
|
|
if self.installdb.has_package(package):
|
2007-10-23 05:27:50 -07:00
|
|
|
status = INFO_INSTALLED
|
2007-10-23 16:21:40 -07:00
|
|
|
pkg = self.installdb.get_package(package)
|
|
|
|
elif self.packagedb.has_package(package):
|
2007-10-23 05:27:50 -07:00
|
|
|
status = INFO_AVAILABLE
|
2007-10-23 16:21:40 -07:00
|
|
|
pkg = self.packagedb.get_package(package)
|
2007-10-23 05:27:50 -07:00
|
|
|
else:
|
2007-11-04 01:12:00 -08:00
|
|
|
self.error(ERROR_PACKAGE_NOT_FOUND, "Package was not found")
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2007-11-02 17:28:54 -07:00
|
|
|
if filters:
|
|
|
|
if "none" not in filters:
|
|
|
|
filterlist = filters.split(';')
|
2007-10-30 01:58:11 -07:00
|
|
|
|
2007-11-02 17:28:54 -07:00
|
|
|
if FILTER_INSTALLED in filterlist and status != INFO_INSTALLED:
|
|
|
|
return
|
2007-11-06 14:07:12 -08:00
|
|
|
if FILTER_NOT_INSTALLED in filterlist and status == INFO_INSTALLED:
|
2007-11-02 17:28:54 -07:00
|
|
|
return
|
|
|
|
if FILTER_GUI in filterlist and "app:gui" not in pkg.isA:
|
|
|
|
return
|
2007-11-06 14:07:12 -08:00
|
|
|
if FILTER_NOT_GUI in filterlist and "app:gui" in pkg.isA:
|
2007-11-02 17:28:54 -07:00
|
|
|
return
|
2007-10-30 01:58:11 -07:00
|
|
|
|
2007-10-23 16:21:40 -07:00
|
|
|
version = self.__get_package_version(pkg)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2007-10-24 11:07:19 -07:00
|
|
|
id = self.get_package_id(pkg.name, version, pkg.architecture, "")
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
return self.package(id, status, pkg.summary)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def get_depends(self, filters, package_ids, recursive):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Prints a list of depends for a given package """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-10-23 05:27:50 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-23 16:21:40 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
for pkg in self.packagedb.get_package(package).runtimeDependencies():
|
|
|
|
# Internal FIXME: PiSi API has really inconsistent for return types and arguments!
|
|
|
|
self.__get_package(pkg.package)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def get_details(self, package_ids):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Prints a detailed description for a given package """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-10-23 05:27:50 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-23 16:21:40 -07:00
|
|
|
|
2007-10-23 05:27:50 -07:00
|
|
|
if self.packagedb.has_package(package):
|
2007-10-30 00:39:26 -07:00
|
|
|
pkg = self.packagedb.get_package(package)
|
2007-11-01 00:47:37 -07:00
|
|
|
|
|
|
|
if self.groups.has_key(pkg.partOf):
|
|
|
|
group = self.groups[pkg.partOf]
|
|
|
|
else:
|
|
|
|
group = GROUP_UNKNOWN
|
|
|
|
|
2008-05-02 10:05:53 -07:00
|
|
|
self.details("%s-%s" % (pkg.name, self.__get_package_version(pkg)),
|
2007-10-30 00:39:26 -07:00
|
|
|
pkg.license,
|
2007-11-01 00:47:37 -07:00
|
|
|
group,
|
2007-10-30 00:39:26 -07:00
|
|
|
pkg.description,
|
|
|
|
pkg.packageURI,
|
2008-01-08 17:56:44 -08:00
|
|
|
pkg.packageSize)
|
2007-10-23 05:27:50 -07:00
|
|
|
else:
|
2007-11-04 01:12:00 -08:00
|
|
|
self.error(ERROR_PACKAGE_NOT_FOUND, "Package was not found")
|
2007-10-26 06:08:04 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def get_files(self, package_ids):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Prints a file list for a given package """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-10-23 16:21:40 -07:00
|
|
|
self.percentage(None)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-23 05:27:50 -07:00
|
|
|
|
|
|
|
if self.installdb.has_package(package):
|
2007-10-30 00:39:26 -07:00
|
|
|
pkg = self.installdb.get_files(package)
|
2007-11-01 00:47:37 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
# FIXME: Add "/" as suffix
|
|
|
|
files = map(lambda y: y.path, pkg.list)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
file_list = ";".join(files)
|
2007-10-24 07:18:53 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
self.files(package, file_list)
|
2007-10-24 05:27:00 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def get_repo_list(self, filters):
|
2007-10-23 16:21:40 -07:00
|
|
|
""" Prints available repositories """
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(True)
|
2007-10-23 13:50:48 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2007-10-23 05:27:50 -07:00
|
|
|
for repo in pisi.api.list_repos():
|
2007-10-23 16:21:40 -07:00
|
|
|
# Internal FIXME: What an ugly way to get repo uri
|
2007-10-30 00:39:26 -07:00
|
|
|
# FIXME: Use repository enabled/disabled state
|
2007-10-23 05:27:50 -07:00
|
|
|
self.repo_detail(repo, self.repodb.get_repo(repo).indexuri.get_uri(), "true")
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def get_requires(self, filters, package_ids, recursive):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Prints a list of requires for a given package """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-10-24 07:18:53 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-30 00:39:26 -07:00
|
|
|
|
|
|
|
# FIXME: Handle packages which is not installed from repository
|
|
|
|
for pkg in self.packagedb.get_rev_deps(package):
|
|
|
|
self.__get_package(pkg[0])
|
2007-10-24 07:18:53 -07:00
|
|
|
|
2008-02-28 09:35:46 -08:00
|
|
|
def get_updates(self, filter):
|
2007-10-23 16:21:40 -07:00
|
|
|
""" Prints available updates and types """
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(True)
|
2007-10-23 16:21:40 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2007-10-23 05:27:50 -07:00
|
|
|
for package in pisi.api.list_upgradable():
|
2007-10-23 13:50:48 -07:00
|
|
|
|
2007-10-24 07:41:01 -07:00
|
|
|
pkg = self.packagedb.get_package(package)
|
2007-10-23 13:50:48 -07:00
|
|
|
|
2007-10-23 16:21:40 -07:00
|
|
|
version = self.__get_package_version(pkg)
|
2007-10-24 11:07:19 -07:00
|
|
|
id = self.get_package_id(pkg.name, version, pkg.architecture, "")
|
2007-10-23 16:21:40 -07:00
|
|
|
|
2007-10-23 13:50:48 -07:00
|
|
|
# Internal FIXME: PiSi must provide this information as a single API call :(
|
2008-09-26 06:46:02 -07:00
|
|
|
updates = [i for i in self.packagedb.get_package(package).history
|
2007-10-24 07:52:04 -07:00
|
|
|
if pisi.version.Version(i.release) > pisi.version.Version(self.installdb.get_package(package).release)]
|
2007-10-23 13:50:48 -07:00
|
|
|
if pisi.util.any(lambda i:i.type == "security", updates):
|
|
|
|
self.package(id, INFO_SECURITY, pkg.summary)
|
|
|
|
else:
|
|
|
|
self.package(id, INFO_NORMAL, pkg.summary)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
2008-05-07 07:21:03 -07:00
|
|
|
def install_files(self, trusted, files):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Installs given package into system"""
|
|
|
|
# FIXME: install progress
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(False)
|
2007-10-30 00:39:26 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
|
|
|
try:
|
2007-11-06 14:48:51 -08:00
|
|
|
self.status(STATUS_INSTALL)
|
2007-10-30 00:39:26 -07:00
|
|
|
pisi.api.install([file])
|
|
|
|
except pisi.Error,e:
|
|
|
|
# FIXME: Error: internal-error : Package re-install declined
|
|
|
|
# Force needed?
|
|
|
|
self.error(ERROR_PACKAGE_ALREADY_INSTALLED, e)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def install_packages(self, package_ids):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Installs given package into system"""
|
|
|
|
# FIXME: fetch/install progress
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(False)
|
2007-10-30 00:39:26 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-30 00:39:26 -07:00
|
|
|
|
|
|
|
if self.packagedb.has_package(package):
|
2007-11-06 14:48:51 -08:00
|
|
|
self.status(STATUS_INSTALL)
|
2007-10-30 00:39:26 -07:00
|
|
|
try:
|
|
|
|
pisi.api.install([package])
|
|
|
|
except pisi.Error,e:
|
2008-04-09 19:58:49 -07:00
|
|
|
self.error(ERROR_UNKNOWN, e)
|
2007-10-30 00:39:26 -07:00
|
|
|
else:
|
|
|
|
self.error(ERROR_PACKAGE_NOT_INSTALLED, "Package is already installed")
|
|
|
|
|
2007-10-23 05:27:50 -07:00
|
|
|
def refresh_cache(self):
|
2007-10-23 16:21:40 -07:00
|
|
|
""" Updates repository indexes """
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(False)
|
2007-10-23 05:27:50 -07:00
|
|
|
self.percentage(0)
|
2007-11-27 23:42:39 -08:00
|
|
|
self.status(STATUS_REFRESH_CACHE)
|
2007-10-23 05:27:50 -07:00
|
|
|
|
|
|
|
slice = (100/len(pisi.api.list_repos()))/2
|
|
|
|
|
|
|
|
percentage = 0
|
|
|
|
for repo in pisi.api.list_repos():
|
|
|
|
pisi.api.update_repo(repo)
|
|
|
|
percentage += slice
|
|
|
|
self.percentage(percentage)
|
|
|
|
|
|
|
|
self.percentage(100)
|
2007-10-23 16:21:40 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def remove_packages(self, deps, package_ids):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Removes given package from system"""
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(False)
|
2007-10-23 16:21:40 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-23 16:21:40 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
if self.installdb.has_package(package):
|
2007-11-06 14:48:51 -08:00
|
|
|
self.status(STATUS_REMOVE)
|
2007-10-30 00:39:26 -07:00
|
|
|
try:
|
|
|
|
pisi.api.remove([package])
|
|
|
|
except pisi.Error,e:
|
|
|
|
# system.base packages cannot be removed from system
|
|
|
|
self.error(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE, e)
|
|
|
|
else:
|
|
|
|
self.error(ERROR_PACKAGE_NOT_INSTALLED, "Package is not installed")
|
2007-10-27 03:26:30 -07:00
|
|
|
|
|
|
|
def repo_set_data(self, repo_id, parameter, value):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Sets a parameter for the repository specified """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(False)
|
2007-10-27 03:26:30 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
|
|
|
if parameter == "add-repo":
|
|
|
|
try:
|
|
|
|
pisi.api.add_repo(repo_id, value, parameter)
|
|
|
|
except pisi.Error, e:
|
2008-04-09 19:58:49 -07:00
|
|
|
self.error(ERROR_UNKNOWN, e)
|
2007-10-27 03:26:30 -07:00
|
|
|
|
|
|
|
try:
|
|
|
|
pisi.api.update_repo(repo_id)
|
|
|
|
except pisi.fetcher.FetchError:
|
|
|
|
pisi.api.remove_repo(repo_id)
|
|
|
|
self.error(ERROR_REPO_NOT_FOUND, "Could not be reached to repository, removing from system")
|
|
|
|
elif parameter == "remove-repo":
|
|
|
|
try:
|
|
|
|
pisi.api.remove_repo(repo_id)
|
|
|
|
except pisi.Error:
|
|
|
|
self.error(ERROR_REPO_NOT_FOUND, "Repository is not exists")
|
|
|
|
else:
|
2007-11-04 01:12:00 -08:00
|
|
|
self.error(ERROR_NOT_SUPPORTED, "Parameter not supported")
|
2007-10-30 00:39:26 -07:00
|
|
|
|
|
|
|
def resolve(self, filters, package):
|
|
|
|
""" Turns a single package name into a package_id suitable for the other methods """
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(True)
|
2007-10-30 00:39:26 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
self.__get_package(package[0], filters)
|
2007-10-30 00:39:26 -07:00
|
|
|
|
2007-11-02 07:41:42 -07:00
|
|
|
def search_details(self, filters, key):
|
|
|
|
""" Prints a detailed list of packages contains search term """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-11-02 07:41:42 -07:00
|
|
|
self.percentage(None)
|
2007-11-27 23:42:39 -08:00
|
|
|
self.status(STATUS_INFO)
|
2008-09-26 06:46:02 -07:00
|
|
|
|
2007-11-02 07:41:42 -07:00
|
|
|
# Internal FIXME: Use search_details instead of _package when API gains that ability :)
|
|
|
|
for pkg in pisi.api.search_package([key]):
|
|
|
|
self.__get_package(pkg, filters)
|
|
|
|
|
2007-10-30 07:44:39 -07:00
|
|
|
def search_file(self, filters, key):
|
|
|
|
""" Prints the installed package which contains the specified file """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-10-30 07:44:39 -07:00
|
|
|
self.percentage(None)
|
2007-11-27 23:42:39 -08:00
|
|
|
self.status(STATUS_INFO)
|
2007-10-30 07:44:39 -07:00
|
|
|
|
|
|
|
# Internal FIXME: Why it is needed?
|
|
|
|
key = key.lstrip("/")
|
|
|
|
|
|
|
|
for pkg, files in pisi.api.search_file(key):
|
|
|
|
self.__get_package(pkg)
|
|
|
|
|
2007-11-01 00:47:37 -07:00
|
|
|
def search_group(self, filters, group):
|
2007-11-02 07:41:42 -07:00
|
|
|
""" Prints a list of packages belongs to searched group """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-11-01 00:47:37 -07:00
|
|
|
self.percentage(None)
|
2007-11-27 23:42:39 -08:00
|
|
|
self.status(STATUS_INFO)
|
2007-11-01 00:47:37 -07:00
|
|
|
|
|
|
|
try:
|
|
|
|
for key in self.groups.keys():
|
|
|
|
if self.groups[key] == group:
|
|
|
|
for pkg in self.componentdb.get_packages(key, walk = True):
|
|
|
|
self.__get_package(pkg, filters)
|
|
|
|
except:
|
2007-11-04 01:12:00 -08:00
|
|
|
self.error(ERROR_GROUP_NOT_FOUND, "Component %s was not found" % group)
|
2007-11-01 00:47:37 -07:00
|
|
|
|
2007-10-30 00:39:26 -07:00
|
|
|
def search_name(self, filters, package):
|
2007-11-02 07:41:42 -07:00
|
|
|
""" Prints a list of packages contains search term in its name """
|
2008-01-24 15:02:40 -08:00
|
|
|
self.allow_cancel(True)
|
2007-10-30 00:39:26 -07:00
|
|
|
self.percentage(None)
|
2007-11-27 23:42:39 -08:00
|
|
|
self.status(STATUS_INFO)
|
2007-10-30 00:39:26 -07:00
|
|
|
|
|
|
|
for pkg in pisi.api.search_package([package]):
|
2007-10-30 01:58:11 -07:00
|
|
|
self.__get_package(pkg, filters)
|
2007-10-30 00:39:26 -07:00
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
def update_packages(self, package_ids):
|
2007-10-30 00:39:26 -07:00
|
|
|
""" Updates given package to its latest version """
|
|
|
|
# FIXME: fetch/install progress
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(False)
|
2007-10-30 00:39:26 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
2008-09-30 12:09:38 -07:00
|
|
|
package = self.get_package_from_id(package_ids[0])[0]
|
2007-10-30 00:39:26 -07:00
|
|
|
|
|
|
|
if self.installdb.has_package(package):
|
|
|
|
try:
|
|
|
|
pisi.api.upgrade([package])
|
|
|
|
except pisi.Error,e:
|
2008-04-09 19:58:49 -07:00
|
|
|
self.error(ERROR_UNKNOWN, e)
|
2007-10-30 00:39:26 -07:00
|
|
|
else:
|
|
|
|
self.error(ERROR_PACKAGE_NOT_INSTALLED, "Package is already installed")
|
|
|
|
|
|
|
|
def update_system(self):
|
|
|
|
""" Updates all available packages """
|
|
|
|
# FIXME: fetch/install progress
|
2008-09-26 06:46:02 -07:00
|
|
|
self.allow_cancel(False)
|
2007-10-30 00:39:26 -07:00
|
|
|
self.percentage(None)
|
|
|
|
|
|
|
|
if not len(pisi.api.list_upgradable()) > 0:
|
2008-04-09 19:58:49 -07:00
|
|
|
self.error(ERROR_NO_PACKAGES_TO_UPDATE, "System is already up2date")
|
2007-10-30 00:39:26 -07:00
|
|
|
|
|
|
|
try:
|
|
|
|
pisi.api.upgrade(pisi.api.list_upgradable())
|
|
|
|
except pisi.Error,e:
|
2008-04-09 19:58:49 -07:00
|
|
|
self.error(ERROR_UNKNOWN, e)
|
2008-09-26 06:46:02 -07:00
|
|
|
|
|
|
|
def main():
|
2008-09-30 12:09:38 -07:00
|
|
|
backend = PackageKitPisiBackend('')
|
2008-09-26 06:46:02 -07:00
|
|
|
backend.dispatcher(sys.argv[1:])
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|
|
|
|
|