class Revamp::Persister::Rpm::Builder
A builder for RPM's packages
Constants
- ATTRS
- RPMS
- SELFDIR
- SOURCES
- SPECS
Attributes
produced[R]
produced?[R]
Public Class Methods
new(model, dir, options)
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 40 def initialize(model, dir, options) @options = options @name = "puppetmodule_#{model.slugname}" @release = options[:release] assign_model(model) @filename = "#{name}-#{version}-#{release}.noarch.rpm" @rpm = "#{name}-#{version}" @specfile = rpm + '.spec' @tmpdir = dir @produced = false @log = Revamp.logger @requirements = configure_rpm_requirements_line @log.debug("Target file: #{target}") end
Public Instance Methods
cleanup()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 91 def cleanup arch = RbConfig::CONFIG['arch'].gsub('-linux', '') cleanup_files [ sources_tgz_path, specfile_path, tmpdir.join('BUILD').join(rpm), tmpdir.join('BUILDROOT').join("#{rpm}-#{release}.#{arch}") ] end
make_structure()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 66 def make_structure return unless needs_to_write? FileUtils.mkdir_p(tmpdir.join(SOURCES)) FileUtils.mkdir_p(tmpdir.join(SPECS)) end
produce()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 55 def produce if needs_to_write? @log.info("Converting to RPM package #{target}...") cmd = "rpmbuild -ba #{SPECS}/#{specfile}" verbose = options[:verbose] ret = Revamp::Persister::Rpm::CommandLine.execute(cmd, tmpdir, verbose) fail "RPM Build failed with retcode = #{ret.exitstatus}" unless ret.success? end move_produced end
write_sources()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 76 def write_sources return unless needs_to_write? pathsufix = Pathname.new(rpm) File.open(sources_tgz_path, 'wb') do |tgz| Zlib::GzipWriter.wrap(tgz) do |gz| Gem::Package::TarWriter.new(gz) do |tar| model.files.each do |file, content| full = pathsufix.join(file).to_s tar.add_file_simple(full, 0644, content.length) { |io| io.write(content) } end end end end end
write_spec()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 72 def write_spec File.open(specfile_path, 'w') { |file| file.write(generate_spec) } if needs_to_write? end
Protected Instance Methods
generate_spec()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 101 def generate_spec tpl = SELFDIR.join('rpm-spec.erb') values = Hash[ATTRS.map { |key| [key, send(key)] }] erbize(tpl.read, values) end
Private Instance Methods
assign_model(model)
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 109 def assign_model(model) @model = model @filenames = model.files.keys @version = model.version @has_requirements = model.dependencies.any? end
move_produced()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 128 def move_produced produced = tmpdir.join(RPMS).join('noarch').join(filename) @log.debug("Produced RPM in build dir: #{produced}") if needs_to_write? FileUtils.mv(produced, target) @produced = true end target end
needs_to_write?()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 138 def needs_to_write? !File.exist?(target) || options[:clobber] end
sources_tgz_path()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 116 def sources_tgz_path tmpdir.join(SOURCES).join("#{rpm}.tar.gz") end
specfile_path()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 120 def specfile_path tmpdir.join(SPECS).join(specfile) end
target()
click to toggle source
# File lib/revamp/persister/rpm/builder.rb, line 124 def target Pathname.new(options[:outdir]).join(filename) end