Skip to content

Commit

Permalink
Implement rich RPM dependencies
Browse files Browse the repository at this point in the history
This implements rich RPM dependencies, which are available with RPM
4.14+ (introduced in Fedora 27[1]). This means only a single line for a
dependency is used. That doesn't play well with the
.with_requires.commented_out approach that was implemented. This instead
uses parameters.

An alternative approach could be to move this to the template.

[1]: https://fedoraproject.org/wiki/Changes/RPM-4.14
  • Loading branch information
ekohl committed Nov 24, 2023
1 parent b3bc787 commit fc294a1
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
18 changes: 18 additions & 0 deletions lib/gem2rpm/rpm_dependency.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,23 @@ def to_rpm
end
rpm_dependencies.join("\n")
end

# Returns string with entry suitable for RPM .spec file with RPM 4.14+.
def to_rich_rpm(with_requires: false, commented_out: false)
rpm_dependencies = requirement.map do |version|
version.to_s.empty? ? name : "#{name} #{version}"
end
result = rpm_dependencies.size == 1 ? rpm_dependencies.first : "(#{rpm_dependencies.join(' with ')})"

if with_requires
result.prepend(__getobj__.type == :development ? 'BuildRequires: ' : 'Requires: ')
end

if commented_out
result.prepend('# ')
end

result
end
end
end
12 changes: 11 additions & 1 deletion lib/gem2rpm/rpm_dependency_list.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,21 @@ def comment_out
end

# Returns string with all dependencies from the list converted into entries
# suitable for RPM .spec file. Thise entries should include all necessary
# suitable for RPM .spec file. These entries should include all necessary
# macros depending on file categorization.
def to_rpm
s = entries.map(&:to_rpm).join("\n")
s += "\n" unless s.empty?
end

# Returns a string with all dependencies from the list converted into entries
# suitable for RPM .spec file with RPM 4.14+. Thise entries should include
# all necessary macros depending on file categorization.
def to_rich_rpm(with_requires: false, commented_out: false)
s = entries.map do |entry|
entry.to_rich_rpm(with_requires: with_requires, commented_out: comment_out)
end.join("\n")
s += "\n" unless s.empty?
end
end
end
2 changes: 1 addition & 1 deletion templates/fedora-27-rawhide.spec.erb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ BuildRequires: gcc
<% end -%>
<%= development_dependencies.reject do |d|
["rdoc", "rake", "bundler"].include? d.name
end.virtualize.with_requires.comment_out.to_rpm -%>
end.virtualize.to_rich_rpm(with_requires: true, commented_out: true) -%>
<% if spec.extensions.empty? -%>
BuildArch: noarch
<% end -%>
Expand Down
2 changes: 1 addition & 1 deletion test/templates/test_fedora.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def test_exclude_extension_directory
end

def test_build_requires
assert_includes(@out_string, "\n# BuildRequires: rubygem(test_development) >= 1.0.0\n")
assert_includes(@out_string, "\n# BuildRequires: (rubygem(test_development) >= 1.0 with rubygem(test_development) < 2 with rubygem(test_development) >= 1.0.0)\n")
end

def test_rubygems_is_not_required
Expand Down

0 comments on commit fc294a1

Please sign in to comment.