Viewing file:
info.py (6.09 KB) -rw-r--r--Select action/file-type:

(
+) |

(
+) |

(
+) |
Code (
+) |
Session (
+) |

(
+) |
SDB (
+) |

(
+) |

(
+) |

(
+) |

(
+) |

(
+) |
#
# Copyright (c) 2005 Canonical
# Copyright (c) 2004 Conectiva, Inc.
#
# Written by Gustavo Niemeyer <niemeyer@conectiva.com>
#
# This file is part of Smart Package Manager.
#
# Smart Package Manager 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.
#
# Smart Package Manager 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 Smart Package Manager; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
from smart.util.strtools import sizeToStr
from smart.option import OptionParser
from smart.cache import Package
from smart import *
import re
USAGE=_("smart info [options] [package] ...")
DESCRIPTION=_("""
This command will show information about the given packages.
""")
EXAMPLES=_("""
smart info pkgname
smart info pkgname-1.0
smart info pkgname --urls --paths
""")
def option_parser():
parser = OptionParser(usage=USAGE,
description=DESCRIPTION,
examples=EXAMPLES)
parser.add_option("--urls", action="store_true",
help=_("show URLs"))
parser.add_option("--paths", action="store_true",
help=_("show path list"))
parser.add_option("--changelog", action="store_true",
help=_("show change log"))
return parser
def parse_options(argv):
parser = option_parser()
opts, args = parser.parse_args(argv)
opts.args = args
return opts
def main(ctrl, opts, reloadchannels=True):
if sysconf.get("auto-update"):
from smart.commands import update
updateopts = update.parse_options([])
update.main(ctrl, updateopts)
else:
if reloadchannels:
ctrl.reloadChannels()
cache = ctrl.getCache()
if opts.args:
pkgs = {}
for arg in opts.args:
ratio, results, suggestions = ctrl.search(arg, addprovides=False)
if not results:
if suggestions:
dct = {}
for r, obj in suggestions:
if isinstance(obj, Package):
dct[obj] = True
else:
dct.update(dict.fromkeys(obj.packages, True))
raise Error, _("'%s' matches no packages. "
"Suggestions:\n%s") % \
(arg, "\n".join([" "+str(x) for x in dct]))
else:
raise Error, _("'%s' matches no packages") % arg
dct = {}
for obj in results:
if isinstance(obj, Package):
dct[obj] = True
else:
dct.update(dict.fromkeys(obj.packages, True))
pkgs.update(dct)
pkgs = pkgs.keys()
else:
pkgs = cache.getPackages()
for pkg in pkgs:
channels = {}
infos = []
for loader in pkg.loaders:
channel = loader.getChannel()
info = loader.getInfo(pkg)
infos.append(info)
urls = info.getURLs()
map = channels.setdefault(str(channel), {})
if urls:
map.setdefault("urls", []).extend(urls)
infos.sort()
info = infos[0]
print _("Name:"), pkg.name
print _("Version:"), pkg.version
print _("Priority:"), pkg.getPriority()
print _("Source:"), info.getSource()
print _("Group:"), info.getGroup()
print _("License:"), info.getLicense()
print _("Installed Size:"), sizeToStr(info.getInstalledSize())
print _("Reference URLs:"), " ".join(info.getReferenceURLs())
flags = pkgconf.testAllFlags(pkg)
if flags:
flags.sort()
flags = "%s" % ", ".join(flags)
else:
flags = ""
print _("Flags:"), flags
print _("Channels:"),
channelnames = channels.keys()
channelnames.sort()
print "; ".join(channelnames)
print _("Summary:"), info.getSummary()
print _("Description:")
for line in info.getDescription().splitlines():
line = line.strip()
if not line:
line = "."
print "", line
if opts.urls:
print _("URLs:")
seen = {}
for loader in pkg.loaders:
if loader not in seen:
seen[loader] = True
info = loader.getInfo(pkg)
first = True
for url in info.getURLs():
if first:
print "", loader.getChannel()
first = False
size = info.getSize(url)
if size:
print " ", url, "(%s)" % sizeToStr(size)
else:
print " ", url
if opts.paths or opts.changelog:
for loader in pkg.loaders:
if loader.getInstalled():
info = loader.getInfo(pkg)
break
if opts.paths:
print _("Paths:")
paths = info.getPathList()
paths.sort()
for entry in paths:
print "", entry
if opts.changelog:
print _("Changelog:")
changelog = info.getChangeLog()
for i in range(len(changelog)/2):
print " ", "%s" % changelog[2*i]
changesplit = changelog[2*i+1].split("\n")
print " ", "%s" % changesplit[0]
for i in range(1, len(changesplit)):
print " ", "%s" % changesplit[i]
print
# vim:ts=4:sw=4:et