diff --git a/pisi/api.py b/pisi/api.py index f230b8b8..b26c48f7 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -258,31 +258,27 @@ def info_file(package_fn): def info_name(package_name, installed=False): """fetch package information for a package""" - if ctx.packagedb.has_package(package_name, pisi.itembyrepodb.all): - if installed: - package = ctx.packagedb.get_package(package_name, pisi.itembyrepodb.installed) - else: - package, repo = ctx.packagedb.get_package_repo(package_name) - if repo==pisi.itembyrepodb.installed: - raise Error(_('Package %s not found') % package_name) - - from pisi.metadata import MetaData - metadata = MetaData() - metadata.package = package - #FIXME: get it from sourcedb if available - metadata.source = None - #TODO: fetch the files from server if possible (wow, you maniac -- future exa) - if installed and ctx.installdb.is_installed(package.name): - try: - files = ctx.installdb.files(package.name) - except pisi.Error, e: - ctx.ui.warning(e) - files = None - else: - files = None - return metadata, files + if installed: + package = ctx.packagedb.get_package(package_name, pisi.itembyrepodb.installed) else: - raise Error(_('Package %s not found') % package_name) + package, repo = ctx.packagedb.get_package_repo(package_name, pisi.itembyrepodb.repos) + repostr = repo + + from pisi.metadata import MetaData + metadata = MetaData() + metadata.package = package + #FIXME: get it from sourcedb if available + metadata.source = None + #TODO: fetch the files from server if possible (wow, you maniac -- future exa) + if installed and ctx.installdb.is_installed(package.name): + try: + files = ctx.installdb.files(package.name) + except pisi.Error, e: + ctx.ui.warning(e) + files = None + else: + files = None + return metadata, files def search_package_names(query): r = set() diff --git a/pisi/archive.py b/pisi/archive.py index c3bfa8c5..85f9d058 100644 --- a/pisi/archive.py +++ b/pisi/archive.py @@ -134,7 +134,10 @@ class ArchiveZip(ArchiveBase): else: method = ctx.get_option('compression_method') if not method: - self.zip_obj.write(file_name, arc_name, zipfileext.ZIP_LZMA_BOGUS) + method = 'lzma' + if method == 'lzma': + self.zip_obj.write(file_name, arc_name, zipfileext.ZIP_LZMA_BOGUS, + dictionary = 26, fastBytes = 64) else: self.zip_obj.write(file_name, arc_name, self.comp_method[method]) diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index 4a4c6b93..a3c14ffe 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -675,7 +675,7 @@ Usage: info ... ctx.ui.info(_('[inst] '), noln=True) else: ctx.ui.info(_('Installed package:')) - self.print_pkginfo(metadata, files) + self.print_pkginfo(metadata, files,pisi.itembyrepodb.installed) if ctx.packagedb.has_package(arg): metadata, files = pisi.api.info_name(arg, False) @@ -683,9 +683,9 @@ Usage: info ... ctx.ui.info(_('[repo] '), noln=True) else: ctx.ui.info(_('Package found in repository:')) - self.print_pkginfo(metadata, files) + self.print_pkginfo(metadata, files, pisi.itembyrepodb.repos) - def print_pkginfo(self, metadata, files): + def print_pkginfo(self, metadata, files, repo = None): import os.path if not ctx.get_option('long'): @@ -693,8 +693,10 @@ Usage: info ... ctx.ui.info('%15s - %s' % (pkg.name, unicode(pkg.summary))) else: ctx.ui.info(unicode(metadata.package)) - revdeps = [x[0] for x in ctx.packagedb.get_rev_deps(metadata.package.name)] - print _('Reverse Dependencies:'), util.strlist(revdeps) + if repo: + revdeps = [x[0] for x in + ctx.packagedb.get_rev_deps(metadata.package.name, repo)] + print _('Reverse Dependencies:'), util.strlist(revdeps) if self.options.files or self.options.files_path: if files: print _('\nFiles:') diff --git a/pisi/packagedb.py b/pisi/packagedb.py index 62e38e98..7a2a60cc 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -117,8 +117,13 @@ class PackageDB(object): def proc(txn): package_info = self.d.get_item(name, repo, txn=txn) self.d.remove_item(name, repo, txn=txn) + for dep in package_info.runtimeDependencies(): + dep_name = str(dep.package) + if self.dr.has_key(dep_name, repo, txn): + revdep = self.dr.get_item(dep_name, repo, txn) + revdep = filter(lambda (n,d):n!=name, revdep) + self.dr.add_item(dep_name, revdep, repo, txn) if self.dr.has_key(name, repo, txn=txn): - self.dr.remove_item(name, repo, txn=txn) ctx.componentdb.remove_package(package_info.partOf, package_info.name, repo, txn) self.d.txn_proc(proc, txn) diff --git a/pisi/zipfileext.py b/pisi/zipfileext.py index c8e12e50..2ddc4e9c 100644 --- a/pisi/zipfileext.py +++ b/pisi/zipfileext.py @@ -192,7 +192,7 @@ class ZipFileExt(ZipFile): raise RuntimeError, \ "Compression requires the (missing) pylzma module" - def write(self, filename, arcname=None, compress_type=None): + def write(self, filename, arcname=None, compress_type=None, **kwargs): """Put the bytes from filename into the archive under the name arcname.""" st = os.stat(filename) @@ -253,7 +253,7 @@ class ZipFileExt(ZipFile): buf = fp.read() file_size = len(buf) CRC = binascii.crc32(buf, CRC) - compressed = pylzma.compress(buf, eos=1) + compressed = pylzma.compress(buf, **kwargs) self.fp.write(compressed) zinfo.compress_size = len(compressed) @@ -284,11 +284,6 @@ class ZipFileExt(ZipFile): raise RuntimeError, \ "De-compression requires the (missing) zlib module" return DeflatedZipFileEntry(self.fp, zinfo.compress_size) -## elif zinfo.compress_type == ZIP_BZIP2: -## if not bzip2: -## raise RuntimeError, \ -## "De-compression requires the (missing) bzip2 module" -## return LZMAFileEntry(self.fp, zinfo.compress_size) elif zinfo.compress_type == ZIP_LZMA_BOGUS: if not pylzma: raise RuntimeError, \