diff --git a/pisi/api.py b/pisi/api.py index 0b3dbdd9..994c214e 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -232,17 +232,21 @@ def info_file(package_fn): package.read() return package.metadata, package.files -def info_name(package_name): +def info_name(package_name, installed=False): """fetch package information for a package""" - if packagedb.has_package(package_name): - package = packagedb.get_package(package_name) + if installed: + pkgdb = packagedb.inst_packagedb + else: + pkgdb = packagedb + if pkgdb.has_package(package_name): + package = pkgdb.get_package(package_name) from pisi.metadata import MetaData metadata = MetaData() metadata.package = package #FIXME: get it from sourcedb metadata.source = None #TODO: fetch the files from server if possible - if ctx.installdb.is_installed(package.name): + if installed and ctx.installdb.is_installed(package.name): files = ctx.installdb.files(package.name) else: files = None diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index 6e497d0c..63480aa2 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -513,6 +513,8 @@ class Info(Command): Usage: info ... + is either a package name or a .pisi file, + """ __metaclass__ = autocommand @@ -542,16 +544,31 @@ Usage: info ... component = ctx.componentdb.get_component(arg) #if self.options.long: ctx.ui.info(unicode(component)) - else: # then assume it was a package - self.printinfo_package(arg) + else: # then assume it was a package + info_package(arg) self.finalize() - def printinfo_package(self, arg): + + def info_package(self, arg): + if arg.endswith(ctx.const.package_suffix): + metadata, files = pisi.api.info_file(arg) + ctx.ui.info(_('Package file: %s') % arg) + self.print_pkginfo(metadata, files) + else: + if ctx.installdb.is_installed(arg, True): + metadata, files = pisi.api.info_name(arg) + ctx.ui.info(_('Installed package:')) + self.print_pkginfo(metadata, files) + if packagedb.has_package(arg): + metadata, files = pisi.api.info_name(arg, False) + ctx.ui.info(_('Package found in repository:')) + self.print_pkginfo(metadata, files) + + def print_pkginfo(self, metadata, files): import os.path - metadata, files = pisi.api.info(arg) ctx.ui.info(unicode(metadata.package)) - revdeps = [x[0] for x in packagedb.get_rev_deps(arg)] + revdeps = [x[0] for x in packagedb.get_rev_deps(metadata.package.name)] print _('Reverse Dependencies:'), util.strlist(revdeps) if self.options.files or self.options.files_path: if files: @@ -563,6 +580,7 @@ Usage: info ... print fileinfo.path else: ctx.ui.warning(_('File information not available')) + print class Check(Command): @@ -1013,7 +1031,7 @@ Finds a package in repository containing specified search terms r = pisi.api.search_package_terms(self.args, self.get_lang()) for pkg in r: - self.printinfo_package(pkg) + self.info_package(pkg) self.finalize()