gem2rpm 0.11.2 → 0.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/AUTHORS +1 -0
- data/README.md +2 -2
- data/bin/gem2rpm +28 -107
- data/lib/gem2rpm.rb +20 -12
- data/lib/gem2rpm/configuration.rb +159 -10
- data/lib/gem2rpm/dependency.rb +1 -1
- data/lib/gem2rpm/distro.rb +7 -9
- data/lib/gem2rpm/helpers.rb +4 -4
- data/lib/gem2rpm/spec_fetcher.rb +1 -1
- data/lib/gem2rpm/specification.rb +5 -6
- data/lib/gem2rpm/template.rb +5 -5
- data/lib/gem2rpm/template_helpers.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 911d15cecd229ed97a9a901cfdac408ef08796cb
|
4
|
+
data.tar.gz: 211b7ad4686015ac6eb03729f61a31f85894c581
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4cb61a3ab8618afda9f3530bafb8712e76ebc21eb7f00ff97678704584342a3f1af230d4b4d150457db1f33feec7c5756ff0dcc92b7985921e3c3d7f5f2505c
|
7
|
+
data.tar.gz: bf4a5b88e63300b0f0db6bd0f64685250c182a638a2b6e0e41588bd588f65e5ade8187fe438d7ae05e951d09ad907cb7e3284620488f681341bdad6661c83172
|
data/AUTHORS
CHANGED
data/README.md
CHANGED
@@ -58,7 +58,7 @@ $ gem2rpm -T > rubygem-GEM.spec.template
|
|
58
58
|
Now you can edit the template and then run gem2rpm to generate the spec file using the edited template:
|
59
59
|
|
60
60
|
```
|
61
|
-
$ gem2rpm -t rubygem-GEM.spec.template > rubygem-GEM.spec
|
61
|
+
$ gem2rpm -t rubygem-GEM.spec.template GEM-1.2.3.gem > rubygem-GEM.spec
|
62
62
|
```
|
63
63
|
|
64
64
|
With this new template you can now build your RPM as usual and when a new version of the gem becomes available, you just edit the saved template and rerun gem2rpm over it.
|
@@ -115,7 +115,7 @@ where GEM is the name of the packaged gem. The default template also makes
|
|
115
115
|
sure that the resulting package provides 'ruby($GEM)', according to general
|
116
116
|
packaging conventions for scripting languages.
|
117
117
|
|
118
|
-
##
|
118
|
+
## Limitations
|
119
119
|
|
120
120
|
Because of the differences between the two packaging schemes, it is impossible to come up with a completely automated way of doing the conversion, but the spec files produced by this package should be good enough for most pure-ruby gems.
|
121
121
|
|
data/bin/gem2rpm
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH.push(File.expand_path(File.dirname(__FILE__) + "/../lib"))
|
5
5
|
|
6
6
|
require 'gem2rpm'
|
7
7
|
require 'optparse'
|
@@ -9,98 +9,31 @@ require 'fileutils'
|
|
9
9
|
require 'open-uri'
|
10
10
|
require 'uri'
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
opts.separator(" Uses a template to generate the RPM specfile")
|
15
|
-
opts.separator(" from the gem specification.")
|
16
|
-
|
17
|
-
print_template_file = nil
|
18
|
-
template_file = nil
|
19
|
-
output_file = nil
|
20
|
-
local = false
|
21
|
-
srpm = false
|
22
|
-
deps = false
|
23
|
-
nongem = false
|
24
|
-
doc_subpackage = true
|
25
|
-
fetch = false
|
26
|
-
|
27
|
-
opts.separator("")
|
28
|
-
opts.separator(" Options:")
|
29
|
-
opts.on("-T", "--current-template", "Print the current template") do |val|
|
30
|
-
print_template_file = true
|
31
|
-
end
|
32
|
-
opts.on("-t", "--template TEMPLATE", "Use TEMPLATE for the specfile") do |val|
|
33
|
-
template_file = val
|
34
|
-
end
|
35
|
-
opts.on("--templates", "List all available templates") do
|
36
|
-
puts "Available templates in #{Gem2Rpm::Template.default_location}:\n\n"
|
37
|
-
puts Gem2Rpm::Template.list.map{
|
38
|
-
|t| t.gsub(/(.*)\.spec.erb/, '\\1')
|
39
|
-
}.join("\n")
|
40
|
-
exit 0
|
41
|
-
end
|
42
|
-
opts.on("-v", "--version", "Print gem2rpm's version and exit") do
|
43
|
-
puts Gem2Rpm::VERSION
|
44
|
-
exit 0
|
45
|
-
end
|
46
|
-
opts.on("-o", "--output FILE", "Send the specfile to FILE") do |val|
|
47
|
-
output_file = val
|
48
|
-
end
|
49
|
-
opts.on("-s", "--srpm", "Create a source RPM") do |val|
|
50
|
-
srpm = true
|
51
|
-
end
|
52
|
-
opts.on("-l", "--local", "Do not retrieve Gem information over
|
53
|
-
#{' '*36} the network. Use on disconnected machines") do |val|
|
54
|
-
local = true
|
55
|
-
end
|
56
|
-
opts.on("-d", "--dependencies", "Print the dependencies of the gem") do |val|
|
57
|
-
deps = true
|
58
|
-
end
|
59
|
-
opts.on("-n", "--nongem", "Generate a subpackage for non-gem use") do |val|
|
60
|
-
nongem = true
|
61
|
-
end
|
62
|
-
opts.on("--no-doc", "Disable document subpackage") do |val|
|
63
|
-
doc_subpackage = false
|
64
|
-
end
|
65
|
-
opts.on("--fetch", "Fetch the gem from rubygems.org") do |val|
|
66
|
-
fetch = true
|
67
|
-
end
|
68
|
-
opts.separator("")
|
69
|
-
opts.separator(" Arguments:")
|
70
|
-
opts.separator(" GEM The path to the locally stored gem package file or the name")
|
71
|
-
opts.separator(" of the gem when using --fetch.")
|
72
|
-
opts.separator("")
|
73
|
-
|
74
|
-
begin
|
75
|
-
rest = opts.permute(ARGV)
|
76
|
-
rescue OptionParser::InvalidOption => e
|
77
|
-
$stderr.puts "#{e}\n\n"
|
78
|
-
$stderr.puts opts
|
79
|
-
exit(1)
|
80
|
-
end
|
12
|
+
options = Gem2Rpm::Configuration.instance.options
|
13
|
+
rest = options[:args]
|
81
14
|
|
82
15
|
template = begin
|
83
|
-
Gem2Rpm::Template.find template_file, :gem_file => rest[0]
|
16
|
+
Gem2Rpm::Template.find options[:template_file], :gem_file => rest[0]
|
84
17
|
rescue Gem2Rpm::Template::TemplateError => e
|
85
18
|
$stderr.puts e
|
86
19
|
exit(1)
|
87
20
|
end
|
88
21
|
|
89
|
-
if print_template_file
|
22
|
+
if options[:print_template_file]
|
90
23
|
puts template.read
|
91
24
|
exit 0
|
92
25
|
end
|
93
26
|
|
94
27
|
if rest.size != 1
|
95
|
-
|
96
|
-
|
97
|
-
|
28
|
+
$stderr.puts "Missing GEMFILE\n\n"
|
29
|
+
$stderr.puts opts
|
30
|
+
exit(1)
|
98
31
|
end
|
99
32
|
gemfile = rest[0]
|
100
33
|
|
101
|
-
if fetch
|
34
|
+
if options[:fetch]
|
102
35
|
gem_uri = ''
|
103
|
-
open("
|
36
|
+
open("https://rubygems.org/api/v1/gems/#{gemfile}.json") do |f|
|
104
37
|
gem_uri = f.read.match(/"gem_uri":\s*"(.*?)",/m)[1]
|
105
38
|
gemfile = URI.parse(gem_uri).path.split('/').last
|
106
39
|
open(gemfile, 'w') do |gf|
|
@@ -109,45 +42,33 @@ if fetch
|
|
109
42
|
end
|
110
43
|
end
|
111
44
|
|
112
|
-
srpmdir = nil
|
113
|
-
gemname = nil
|
114
45
|
srpmdir = nil
|
115
46
|
specfile = nil
|
116
|
-
if srpm
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
output_file = specfile
|
122
|
-
end
|
47
|
+
if options[:srpm]
|
48
|
+
gemname = Gem2Rpm::Package.new(gemfile).spec.name
|
49
|
+
srpmdir = `/bin/mktemp -t -d gem2rpm-#{gemname}.XXXXXX`.chomp
|
50
|
+
specfile = File.join(srpmdir, "rubygem-#{gemname}.spec")
|
51
|
+
options[:output_file] ||= specfile
|
123
52
|
end
|
124
53
|
|
125
54
|
# Produce a specfile
|
126
|
-
if output_file.nil?
|
127
|
-
|
55
|
+
if options[:output_file].nil?
|
56
|
+
Gem2Rpm.convert(gemfile, template, $stdout, options[:nongem], options[:local], options[:doc_subpackage]) unless options[:deps]
|
128
57
|
else
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
58
|
+
begin
|
59
|
+
out = open(options[:output_file], "w")
|
60
|
+
Gem2Rpm.convert(gemfile, template, out, options[:nongem], options[:local], options[:doc_subpackage])
|
61
|
+
ensure
|
62
|
+
out.close
|
63
|
+
end
|
135
64
|
end
|
136
65
|
|
137
66
|
# Create a source RPM
|
138
|
-
if srpm
|
139
|
-
|
140
|
-
|
141
|
-
end
|
142
|
-
FileUtils::copy(gemfile, srpmdir)
|
67
|
+
if options[:srpm]
|
68
|
+
FileUtils.copy(options[:output_file], specfile) unless File.exist?(specfile)
|
69
|
+
FileUtils.copy(gemfile, srpmdir)
|
143
70
|
|
144
|
-
|
71
|
+
system("rpmbuild -bs --nodeps --define '_sourcedir #{srpmdir}' --define '_srcrpmdir #{Dir.pwd}' #{specfile}")
|
145
72
|
end
|
146
73
|
|
147
|
-
if deps
|
148
|
-
Gem2Rpm::Package.new(gemfile).spec.dependencies.each do |dep|
|
149
|
-
Gem2Rpm::Dependency.new(dep).requirement.each do |r|
|
150
|
-
puts "rubygem(#{dep.name}) #{r}"
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
74
|
+
Gem2Rpm.print_dependencies(gemfile) if options[:deps]
|
data/lib/gem2rpm.rb
CHANGED
@@ -11,7 +11,7 @@ require 'gem2rpm/template'
|
|
11
11
|
module Gem2Rpm
|
12
12
|
extend Gem2Rpm::TemplateHelpers
|
13
13
|
|
14
|
-
Gem2Rpm::VERSION = "0.11.
|
14
|
+
Gem2Rpm::VERSION = "0.11.3"
|
15
15
|
|
16
16
|
class Exception < RuntimeError; end
|
17
17
|
class DownloadUrlError < Exception; end
|
@@ -29,9 +29,9 @@ module Gem2Rpm
|
|
29
29
|
|
30
30
|
spec_and_source, errors = fetcher.spec_for_dependency(dep, false)
|
31
31
|
|
32
|
-
|
32
|
+
fail DownloadUrlError, errors.first.error.message unless errors.empty?
|
33
33
|
|
34
|
-
|
34
|
+
_spec, source = spec_and_source.first
|
35
35
|
|
36
36
|
if source && source.uri
|
37
37
|
download_path = source.uri.to_s
|
@@ -41,13 +41,13 @@ module Gem2Rpm
|
|
41
41
|
download_path
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
44
|
+
def self.convert(fname, template, out = $stdout, nongem = true, local = false,
|
45
45
|
doc_subpackage = true)
|
46
46
|
package = Gem2Rpm::Package.new(fname)
|
47
47
|
# Deprecate, kept just for backward compatibility.
|
48
48
|
format = Gem2Rpm::Format.new(package)
|
49
49
|
spec = Gem2Rpm::Specification.new(package.spec)
|
50
|
-
config = Gem2Rpm::Configuration.instance.
|
50
|
+
config = Gem2Rpm::Configuration.instance.reset
|
51
51
|
download_path = ""
|
52
52
|
unless local
|
53
53
|
begin
|
@@ -64,33 +64,41 @@ module Gem2Rpm
|
|
64
64
|
puts e
|
65
65
|
end
|
66
66
|
|
67
|
+
# Print gem dependencies to the specified output ($stdout by default).
|
68
|
+
def self.print_dependencies(gemfile, out = $stdout)
|
69
|
+
Gem2Rpm::Package.new(gemfile).spec.dependencies.each do |dep|
|
70
|
+
Gem2Rpm::Dependency.new(dep).requirement.each do |r|
|
71
|
+
out.puts "rubygem(#{dep.name}) #{r}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
67
76
|
# Returns the email address of the packager (i.e., the person running
|
68
77
|
# gem2spec). Taken from RPM macros if present, constructed from system
|
69
78
|
# username and hostname otherwise.
|
70
|
-
def
|
79
|
+
def self.packager
|
71
80
|
packager = `rpmdev-packager 2> /dev/null`.chomp rescue ''
|
72
81
|
|
73
82
|
if packager.empty?
|
74
83
|
packager = `rpm --eval '%{packager}' 2> /dev/null`.chomp rescue ''
|
75
84
|
end
|
76
85
|
|
77
|
-
if packager.empty?
|
78
|
-
passwd_entry = Etc
|
79
|
-
packager = "#{(passwd_entry && passwd_entry.gecos) || Etc
|
86
|
+
if packager.empty? || (packager == '%{packager}')
|
87
|
+
passwd_entry = Etc.getpwnam(Etc.getlogin)
|
88
|
+
packager = "#{(passwd_entry && passwd_entry.gecos) || Etc.getlogin} <#{Etc.getlogin}@#{Socket.gethostname}>"
|
80
89
|
end
|
81
90
|
|
82
91
|
packager
|
83
92
|
end
|
84
93
|
|
85
94
|
def self.rubygem_template
|
86
|
-
Template.new(File.join(Template
|
95
|
+
Template.new(File.join(Template.default_location, "#{Distro.nature}.spec.erb"))
|
87
96
|
end
|
88
97
|
|
89
98
|
def self.vagrant_plugin_template
|
90
|
-
file = File.join(Template
|
99
|
+
file = File.join(Template.default_location, "#{Distro.nature}-vagrant-plugin.spec.erb")
|
91
100
|
Template.new(file)
|
92
101
|
end
|
93
|
-
|
94
102
|
end
|
95
103
|
|
96
104
|
# Local Variables:
|
@@ -4,6 +4,18 @@ module Gem2Rpm
|
|
4
4
|
class Configuration
|
5
5
|
include Singleton
|
6
6
|
|
7
|
+
DEFAULT_OPTIONS = {
|
8
|
+
:print_template_file => nil,
|
9
|
+
:template_file => nil,
|
10
|
+
:output_file => nil,
|
11
|
+
:local => false,
|
12
|
+
:srpm => false,
|
13
|
+
:deps => false,
|
14
|
+
:nongem => false,
|
15
|
+
:doc_subpackage => true,
|
16
|
+
:fetch => false,
|
17
|
+
}
|
18
|
+
|
7
19
|
# The defaults should mostly work
|
8
20
|
DEFAULT_MACROS = {
|
9
21
|
:instdir => '%{gem_instdir}',
|
@@ -14,20 +26,54 @@ module Gem2Rpm
|
|
14
26
|
}
|
15
27
|
|
16
28
|
DEFAULT_RULES = {
|
17
|
-
:doc => [
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
29
|
+
:doc => [
|
30
|
+
/\/?CHANGELOG.*/i,
|
31
|
+
/\/?CONTRIBUTING.*/i,
|
32
|
+
/\/?CONTRIBUTORS.*/i,
|
33
|
+
/\/?AUTHORS.*/i,
|
34
|
+
/\/?README.*/i,
|
35
|
+
/\/?History.*/i,
|
36
|
+
/\/?Release.*/i,
|
37
|
+
/\/?doc(\/.*)?/,
|
38
|
+
'NEWS',
|
39
|
+
],
|
40
|
+
:license => [
|
41
|
+
/\/?MIT/,
|
42
|
+
/\/?GPLv[0-9]+/,
|
43
|
+
/\/?.*LICEN(C|S)E/,
|
44
|
+
/\/?COPYING/,
|
45
|
+
],
|
46
|
+
:ignore => [
|
47
|
+
'.gemtest',
|
48
|
+
'.gitignore',
|
49
|
+
'.travis.yml',
|
50
|
+
'.yardopts',
|
51
|
+
'.rvmrc',
|
52
|
+
'.rubocop.yml',
|
53
|
+
/^\..*rc$/i,
|
54
|
+
],
|
23
55
|
# Other files including test files that are not required for
|
24
56
|
# runtime and therefore currently included in -doc
|
25
|
-
:misc => [
|
26
|
-
|
57
|
+
:misc => [
|
58
|
+
/.*.gemspec/,
|
59
|
+
/Gemfile.*/,
|
60
|
+
'Rakefile',
|
61
|
+
'rakefile.rb',
|
62
|
+
'Vagrantfile',
|
63
|
+
/^spec.*/,
|
64
|
+
/^rspec.*/,
|
65
|
+
/^test(s|)/,
|
66
|
+
/^examples.*/,
|
67
|
+
]
|
27
68
|
}
|
28
69
|
|
29
|
-
|
30
|
-
|
70
|
+
def initialize
|
71
|
+
@options = nil
|
72
|
+
@parser = nil
|
73
|
+
end
|
74
|
+
|
75
|
+
# Set the configuration back to default values
|
76
|
+
def reset
|
31
77
|
@_macros = nil
|
32
78
|
@_rules = nil
|
33
79
|
self
|
@@ -51,5 +97,108 @@ module Gem2Rpm
|
|
51
97
|
rules[category] ||= ''
|
52
98
|
end
|
53
99
|
|
100
|
+
# Get options.
|
101
|
+
def options
|
102
|
+
handle_options unless @options
|
103
|
+
@options
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
# Handles list of given options. Use ARGV by default.
|
109
|
+
def handle_options(args = ARGV)
|
110
|
+
@options = Marshal.load Marshal.dump DEFAULT_OPTIONS # deep copy
|
111
|
+
parser.parse!(args)
|
112
|
+
@options[:args] = args
|
113
|
+
# TODO: Refactor, this is probably not the best palce.
|
114
|
+
rescue OptionParser::InvalidOption => e
|
115
|
+
$stderr.puts "#{e}\n\n"
|
116
|
+
$stderr.puts parser
|
117
|
+
exit(1)
|
118
|
+
end
|
119
|
+
|
120
|
+
# Creates an option parser.
|
121
|
+
def create_option_parser
|
122
|
+
@parser = OptionParser.new
|
123
|
+
setup_parser_options
|
124
|
+
end
|
125
|
+
|
126
|
+
# Get parser instance.
|
127
|
+
def parser
|
128
|
+
create_option_parser unless @parser
|
129
|
+
@parser
|
130
|
+
end
|
131
|
+
|
132
|
+
def setup_parser_options
|
133
|
+
parser.banner = "Usage: #{$PROGRAM_NAME} [OPTIONS] GEM"
|
134
|
+
|
135
|
+
parser.separator(' Convert Ruby gems to source RPMs and specfiles.')
|
136
|
+
parser.separator(' Uses a template to generate the RPM specfile')
|
137
|
+
parser.separator(' from the gem specification.')
|
138
|
+
|
139
|
+
parser.separator('')
|
140
|
+
|
141
|
+
parser.separator(' Options:')
|
142
|
+
|
143
|
+
parser.on('-T', '--current-template', 'Print the current template') do
|
144
|
+
options[:print_template_file] = true
|
145
|
+
end
|
146
|
+
|
147
|
+
parser.on('-t', '--template TEMPLATE', 'Use TEMPLATE for the specfile') do |val|
|
148
|
+
options[:template_file] = val
|
149
|
+
end
|
150
|
+
|
151
|
+
# TODO: This does not belong here.
|
152
|
+
parser.on('--templates', 'List all available templates') do
|
153
|
+
puts 'Available templates in #{Gem2Rpm::Template.default_location}:\n\n'
|
154
|
+
puts Gem2Rpm::Template.list.map do |t|
|
155
|
+
t.gsub(/(.*)\.spec.erb/, '\\1')
|
156
|
+
end.join("\n")
|
157
|
+
exit 0
|
158
|
+
end
|
159
|
+
|
160
|
+
# TODO: This does not belong here.
|
161
|
+
parser.on('-v', '--version', 'Print gem2rpm\'s version and exit') do
|
162
|
+
puts Gem2Rpm::VERSION
|
163
|
+
exit 0
|
164
|
+
end
|
165
|
+
|
166
|
+
parser.on('-o', '--output FILE', 'Send the specfile to FILE') do |val|
|
167
|
+
options[:output_file] = val
|
168
|
+
end
|
169
|
+
|
170
|
+
parser.on('-s', '--srpm', 'Create a source RPM') do
|
171
|
+
options[:srpm] = true
|
172
|
+
end
|
173
|
+
|
174
|
+
parser.on('-l', '--local', "Do not retrieve Gem information over
|
175
|
+
#{' ' * 22} the network. Use on disconnected machines") do
|
176
|
+
options[:local] = true
|
177
|
+
end
|
178
|
+
|
179
|
+
parser.on('-d', '--dependencies', 'Print the dependencies of the gem') do
|
180
|
+
options[:deps] = true
|
181
|
+
end
|
182
|
+
|
183
|
+
parser.on('-n', '--nongem', 'Generate a subpackage for non-gem use') do
|
184
|
+
options[:nongem] = true
|
185
|
+
end
|
186
|
+
|
187
|
+
parser.on('--no-doc', 'Disable document subpackage') do
|
188
|
+
options[:doc_subpackage] = false
|
189
|
+
end
|
190
|
+
|
191
|
+
parser.on('--fetch', 'Fetch the gem from rubygems.org') do
|
192
|
+
options[:fetch] = true
|
193
|
+
end
|
194
|
+
|
195
|
+
parser.separator('')
|
196
|
+
|
197
|
+
parser.separator(' Arguments:')
|
198
|
+
parser.separator(' GEM The path to the locally stored gem package file or the name')
|
199
|
+
parser.separator(' of the gem when using --fetch.')
|
200
|
+
|
201
|
+
parser.separator('')
|
202
|
+
end
|
54
203
|
end
|
55
204
|
end
|
data/lib/gem2rpm/dependency.rb
CHANGED
data/lib/gem2rpm/distro.rb
CHANGED
@@ -25,10 +25,8 @@ module Gem2Rpm
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# Try os-release first.
|
28
|
-
if os_release_files = grouped_release_files['os-release']
|
29
|
-
content = File.open(os_release_files.first, Gem2Rpm::OPEN_MODE)
|
30
|
-
f.read
|
31
|
-
end
|
28
|
+
if (os_release_files = grouped_release_files['os-release'])
|
29
|
+
content = File.open(os_release_files.first, Gem2Rpm::OPEN_MODE, &:read)
|
32
30
|
|
33
31
|
begin
|
34
32
|
os_release.os = content[/^ID=(.*)$/, 1].to_sym
|
@@ -40,7 +38,7 @@ module Gem2Rpm
|
|
40
38
|
# If os-release failed (it is empty or has not enough information),
|
41
39
|
# try some other release files.
|
42
40
|
if os_release.os == DEFAULT
|
43
|
-
if fedora_release_files = grouped_release_files['fedora']
|
41
|
+
if (fedora_release_files = grouped_release_files['fedora'])
|
44
42
|
os_release.os = FEDORA
|
45
43
|
versions = []
|
46
44
|
|
@@ -73,7 +71,7 @@ module Gem2Rpm
|
|
73
71
|
# Provides list of release files found on the system.
|
74
72
|
def self.release_files
|
75
73
|
@release_files ||=
|
76
|
-
Dir.glob('/etc/{os-release,*{_version,-release}}*').uniq.select {|e| File.file? e}
|
74
|
+
Dir.glob('/etc/{os-release,*{_version,-release}}*').uniq.select { |e| File.file? e }
|
77
75
|
end
|
78
76
|
|
79
77
|
# Allows to override release files list.
|
@@ -84,13 +82,13 @@ module Gem2Rpm
|
|
84
82
|
|
85
83
|
# Tries to find best suitable template for specified os and version.
|
86
84
|
def self.template_by_os_version(os, version)
|
87
|
-
os_templates = Template.list.grep
|
85
|
+
os_templates = Template.list.grep(/#{os}.*\.spec\.erb/)
|
88
86
|
|
89
87
|
os_templates.each do |file|
|
90
88
|
# We want only distro RubyGems templates to get the right versions
|
91
89
|
next unless file =~ /^#{os}((-([0-9]+\.{0,1}[0-9]+){0,}){0,}(-(#{ROLLING_RELEASES.join('|')})){0,1}).spec.erb/
|
92
90
|
|
93
|
-
if match = Regexp.last_match
|
91
|
+
if (match = Regexp.last_match)
|
94
92
|
return file.gsub('.spec.erb', '') if in_range?(version, match[1].to_s.split('-').drop(1)) || match[1].empty?
|
95
93
|
end
|
96
94
|
end
|
@@ -105,7 +103,7 @@ module Gem2Rpm
|
|
105
103
|
return true if range.first.to_s == version.to_s
|
106
104
|
else # range: [xx, yy]
|
107
105
|
if range[0].to_s <= version.to_s
|
108
|
-
return true if ROLLING_RELEASES.include?
|
106
|
+
return true if ROLLING_RELEASES.include?(range[1]) || (version.to_s <= range[1].to_s)
|
109
107
|
end
|
110
108
|
end
|
111
109
|
|
data/lib/gem2rpm/helpers.rb
CHANGED
@@ -36,13 +36,13 @@ module Gem2Rpm
|
|
36
36
|
# Converts Gem::Requirement into array of requirements strings compatible
|
37
37
|
# with RPM .spec file.
|
38
38
|
def self.requirement_versions_to_rpm(requirement)
|
39
|
-
|
39
|
+
expand_requirement(requirement.requirements).map do |op, version|
|
40
40
|
version == Gem::Version.new(0) ? "" : "#{op} #{version}"
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.file_entries_to_rpm(entries)
|
45
|
-
rpm_file_list = entries.map{ |e|
|
45
|
+
rpm_file_list = entries.map { |e| file_entry_to_rpm(e) }
|
46
46
|
rpm_file_list.join("\n")
|
47
47
|
end
|
48
48
|
|
@@ -64,7 +64,7 @@ module Gem2Rpm
|
|
64
64
|
|
65
65
|
def self.file_entry_to_rpm(entry)
|
66
66
|
config = Gem2Rpm::Configuration.instance
|
67
|
-
case
|
67
|
+
case
|
68
68
|
when doc_file?(entry)
|
69
69
|
"#{config.macro_for(:doc)} #{config.macro_for(:instdir)}/#{entry}".strip
|
70
70
|
when license_file?(entry)
|
@@ -82,7 +82,7 @@ module Gem2Rpm
|
|
82
82
|
# Returns a list of top level directories and files
|
83
83
|
# out of an array of file_list
|
84
84
|
def self.top_level_from_file_list(file_list)
|
85
|
-
file_list.map{ |f| f.gsub!(/([^\/]*).*/,
|
85
|
+
file_list.map { |f| f.gsub!(/([^\/]*).*/, '\1') }.uniq
|
86
86
|
end
|
87
87
|
|
88
88
|
# Compares string to the given regexp conditions
|
data/lib/gem2rpm/spec_fetcher.rb
CHANGED
@@ -6,7 +6,7 @@ module Gem2Rpm
|
|
6
6
|
# Find and fetch specs that match +dependency+.
|
7
7
|
#
|
8
8
|
# If +matching_platform+ is false, gems for all platforms are returned.
|
9
|
-
def spec_for_dependency(dependency, matching_platform=true)
|
9
|
+
def spec_for_dependency(dependency, matching_platform = true)
|
10
10
|
super
|
11
11
|
rescue
|
12
12
|
errors = []
|
@@ -5,24 +5,23 @@ require 'gem2rpm/helpers'
|
|
5
5
|
|
6
6
|
module Gem2Rpm
|
7
7
|
class Specification < SimpleDelegator
|
8
|
-
|
9
8
|
# A long description of gem wrapped to 78 characters.
|
10
9
|
def description
|
11
10
|
d = super.to_s.chomp
|
12
11
|
d = summary.to_s.chomp if d.empty?
|
13
12
|
d.gsub!(/([^.!?])\Z/, "\\1.")
|
14
|
-
Helpers
|
13
|
+
Helpers.word_wrap(d, 78) + "\n"
|
15
14
|
end
|
16
15
|
|
17
16
|
# A list of Gem::Dependency objects this gem depends on (includes every
|
18
17
|
# runtime or development dependency).
|
19
18
|
def dependencies
|
20
|
-
super.map {|d| Gem2Rpm::Dependency.new d}
|
19
|
+
super.map { |d| Gem2Rpm::Dependency.new d }
|
21
20
|
end
|
22
21
|
|
23
22
|
# List of dependencies that are used for development.
|
24
23
|
def development_dependencies
|
25
|
-
super.map {|d| Gem2Rpm::Dependency.new d}
|
24
|
+
super.map { |d| Gem2Rpm::Dependency.new d }
|
26
25
|
end
|
27
26
|
|
28
27
|
# The license(s) for the library. Each license must be a short name,
|
@@ -36,7 +35,7 @@ module Gem2Rpm
|
|
36
35
|
|
37
36
|
# List of dependencies that will automatically be activated at runtime.
|
38
37
|
def runtime_dependencies
|
39
|
-
super.map {|d| Gem2Rpm::Dependency.new d}
|
38
|
+
super.map { |d| Gem2Rpm::Dependency.new d }
|
40
39
|
end
|
41
40
|
|
42
41
|
# The version of Ruby required by the gem. Returns array with
|
@@ -53,7 +52,7 @@ module Gem2Rpm
|
|
53
52
|
# array with empty string. However, this should happen only in rare cases.
|
54
53
|
def required_rubygems_version
|
55
54
|
@required_rubygems_version ||= begin
|
56
|
-
Helpers
|
55
|
+
Helpers.requirement_versions_to_rpm(super)
|
57
56
|
rescue
|
58
57
|
['']
|
59
58
|
end
|
data/lib/gem2rpm/template.rb
CHANGED
@@ -34,10 +34,10 @@ module Gem2Rpm
|
|
34
34
|
end
|
35
35
|
else
|
36
36
|
begin
|
37
|
-
if File.
|
37
|
+
if File.exist?(name)
|
38
38
|
Gem2Rpm::Template.new(name)
|
39
39
|
else
|
40
|
-
Gem2Rpm::Template.new(File.join(Gem2Rpm::Template
|
40
|
+
Gem2Rpm::Template.new(File.join(Gem2Rpm::Template.default_location, name + '.spec.erb'))
|
41
41
|
end
|
42
42
|
rescue TemplateError
|
43
43
|
raise TemplateError, "Could not locate template #{name}"
|
@@ -48,17 +48,17 @@ module Gem2Rpm
|
|
48
48
|
# Create instance of Template class of specified template filename.
|
49
49
|
# TemplateError is raised when the template file does not exists.
|
50
50
|
def initialize(filename)
|
51
|
-
if File.
|
51
|
+
if File.exist? filename
|
52
52
|
@filename = filename
|
53
53
|
else
|
54
|
-
|
54
|
+
fail TemplateError, "Could not locate template #{filename}"
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
# Read the content of the template file.
|
59
59
|
def read
|
60
60
|
@content ||= begin
|
61
|
-
File.open(@filename, OPEN_MODE
|
61
|
+
File.open(@filename, OPEN_MODE, &:read)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -3,14 +3,14 @@ module Gem2Rpm
|
|
3
3
|
# File list block for the main package
|
4
4
|
def main_file_entries(spec)
|
5
5
|
entries = Helpers.top_level_from_file_list(spec.files)
|
6
|
-
entries.delete_if{ |f| Helpers.doc_file?(f) || Helpers.misc_file?(f) }
|
6
|
+
entries.delete_if { |f| Helpers.doc_file?(f) || Helpers.misc_file?(f) }
|
7
7
|
Helpers.file_entries_to_rpm(entries)
|
8
8
|
end
|
9
9
|
|
10
10
|
# File list block for the doc sub-package
|
11
11
|
def doc_file_entries(spec)
|
12
12
|
entries = Helpers.top_level_from_file_list(spec.files)
|
13
|
-
entries.delete_if{ |f| !(Helpers.doc_file?(f) || Helpers.misc_file?(f)) }
|
13
|
+
entries.delete_if { |f| !(Helpers.doc_file?(f) || Helpers.misc_file?(f)) }
|
14
14
|
Helpers.file_entries_to_rpm(entries)
|
15
15
|
end
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem2rpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Lutterkort
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-04-26 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: |2
|
15
15
|
Generate source rpms and rpm spec files from a Ruby Gem.
|
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
version: '0'
|
67
67
|
requirements: []
|
68
68
|
rubyforge_project:
|
69
|
-
rubygems_version: 2.
|
69
|
+
rubygems_version: 2.5.1
|
70
70
|
signing_key:
|
71
71
|
specification_version: 4
|
72
72
|
summary: Generate rpm specfiles from gems
|