def installed(self):
""" Fetch installed packages from ``gem list`` output.
Raw CLI output samples:
.. code-block:: shell-session
$ gem list
*** LOCAL GEMS ***
bigdecimal (1.2.0)
CFPropertyList (2.2.8)
io-console (0.4.2)
json (1.7.7)
libxml-ruby (2.6.0)
molinillo (0.5.4, 0.4.5, 0.2.3)
nokogiri (1.5.6)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
sqlite3 (1.3.7)
test-unit (2.0.0.0)
"""
installed = {}
output = self.run([self.cli_path] + self.cli_args + ['list'])
if output:
regexp = re.compile(r'(\S+) \((.+)\)')
for package in output.split('\n'):
match = regexp.match(package)
if match:
package_id, versions = match.groups()
# Guess latest installed version.
versions = set([v.strip() for v in versions.split(',')])
# Parse versions to avoid lexicographic sorting gotchas.
version = None
if versions:
_, version = max(
[(parse_version(v), v) for v in versions])
installed[package_id] = {
'id': package_id,
'name': package_id,
'installed_version': version}
return installed
评论列表
文章目录