Commit d37a4d21 authored by Jérome Perrin's avatar Jérome Perrin

support rubygemsrecipe recipe

The approach is to look in the parts directory and report everything
that has been installed in lib/ruby/gems/specifications/*.gemspec
To find the name and version, instead of trying to deduct from the
filename, we read the stub metadata from the gemspec file, using the
same login as what rubygems does in
https://github.com/rubygems/rubygems/blob/6b360fdcd2cbd72a902f4107a1deb264a6e7d3ca/lib/rubygems/stub_specification.rb#L4-L10
parent 948ce568
......@@ -81,6 +81,8 @@ def bom_software(installed_software_path): # -> {} (name,kind) -> PkgInfo
url = '%s/%s-%s.tar.gz' % (nxdbase, name, v)
else:
url = 'https://pypi.org/project/%s/%s/' % (name, v)
elif kind == 'gem':
url = 'https://rubygems.org/gems/%s/versions/%s' % (name, ver)
else:
raise NotImplementedError('TODO url for kind %r (urlpath: %r)' % (kind, urlpath))
......@@ -257,6 +259,11 @@ def bom_software(installed_software_path): # -> {} (name,kind) -> PkgInfo
ver = 'HEAD'
addbom(repo, 'git', ver)
elif recipe in ('rubygemsrecipe',):
location = part.get('location', raw=True)
for gemspec in glob('%s/lib/ruby/gems/specifications/*.gemspec' % location):
addbom(gemspec, 'gem')
elif recipe in ('plone.recipe.command',):
# not downloading anything
pass
......@@ -416,6 +423,14 @@ def _namever(url, failonerr):
if m is not None:
url = unquote(m.group('f'))
if url.endswith('.gemspec'):
with open(url) as f:
_ = f.readline()
stub_line = f.readline()
dash, stub, name, ver, _, _ = stub_line.split()
assert (dash, stub) == ('#', 'stub:')
return name, ver
filename = basename(url)
name = filename
......
......@@ -453,6 +453,49 @@ case1("""\
recipe = plone.recipe.command==1.1
""", '')
# ruby gems
case1("""\
[gems]
recipe = rubygemsrecipe
location = /ROOT/parts/gems
-- /ROOT/parts/gems/lib/ruby/gems/specifications/gitlab-puma-4.3.3.gitlab.2.gemspec --
# -*- encoding: utf-8 -*-
# stub: gitlab-puma 4.3.3.gitlab.2 ruby lib
# stub: ext/puma_http11/extconf.rb
-- /ROOT/parts/gems/lib/ruby/gems/specifications/pyu-ruby-sasl-0.0.3.3.gemspec --
# -*- encoding: utf-8 -*-
# stub: pyu-ruby-sasl 0.0.3.3 ruby lib
-- /ROOT/parts/gems/lib/ruby/gems/specifications/toml-rb-1.0.0.gemspec --
# -*- encoding: utf-8 -*-
# stub: toml-rb 1.0.0 ruby lib
-- /ROOT/parts/gems/lib/ruby/gems/specifications/tzinfo-1.2.6.gemspec --
# -*- encoding: utf-8 -*-
# stub: tzinfo 1.2.6 ruby lib
-- /ROOT/parts/gems/lib/ruby/gems/specifications/google-protobuf-3.8.0-x86_64-linux.gemspec --
# -*- encoding: utf-8 -*-
# stub: google-protobuf 3.8.0 x86_64-linux lib
-- /ROOT/parts/gems/lib/ruby/gems/specifications/apollo_upload_server-2.0.0.beta.3.gemspec --
# -*- encoding: utf-8 -*-
# stub: apollo_upload_server 2.0.0.beta.3 ruby lib
-- /ROOT/parts/gems/lib/ruby/gems/specifications/omniauth-gitlab-1.0.3.gemspec --
# -*- encoding: utf-8 -*-
# stub: omniauth-gitlab 1.0.3 ruby lib
-- /ROOT/parts/gems/lib/ruby/gems/specifications/diff_match_patch-0.1.0.gemspec --
# -*- encoding: utf-8 -*-
# stub: diff_match_patch 0.1.0 ruby lib
""", """
>>> gems:
apollo_upload_server 2.0.0.beta.3 https://rubygems.org/gems/apollo_upload_server/versions/2.0.0.beta.3
diff_match_patch 0.1.0 https://rubygems.org/gems/diff_match_patch/versions/0.1.0
gitlab-puma 4.3.3.gitlab.2 https://rubygems.org/gems/gitlab-puma/versions/4.3.3.gitlab.2
google-protobuf 3.8.0 https://rubygems.org/gems/google-protobuf/versions/3.8.0
omniauth-gitlab 1.0.3 https://rubygems.org/gems/omniauth-gitlab/versions/1.0.3
pyu-ruby-sasl 0.0.3.3 https://rubygems.org/gems/pyu-ruby-sasl/versions/0.0.3.3
toml-rb 1.0.0 https://rubygems.org/gems/toml-rb/versions/1.0.0
tzinfo 1.2.6 https://rubygems.org/gems/tzinfo/versions/1.2.6
""")
# readline 8 and 5 used simultaneously -> older one is presented as readline5
# libpng 12 and 16 used simultaneously -> ----//---- libpng12
# ----/---- Python2 and Python3
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment