ruby-common/irp.rb
Marcus Rueckert 8c2870d272 Accepting request 1085262 from home:darix:apps
- cleanup irp code
  - unify error handling using the exit_with_error function
  - ensure we add generated files
  - checkin the newly created package

- move new tools into a subpackage ruby-packaging-helpers to avoid
  dependency to /usr/bin/ruby

- Add 2 new utilities
  - irp aka initialize ruby package
    does exactly what the name says. does all the work to
    initialize a new ruby package
  - bundler-dumpdeps: script to generate BR/Requires based on a
    Gemfile.

OBS-URL: https://build.opensuse.org/request/show/1085262
OBS-URL: https://build.opensuse.org/package/show/devel:languages:ruby/ruby-common?expand=0&rev=123
2023-05-07 00:37:55 +00:00

138 lines
3.8 KiB
Ruby

#!/usr/bin/ruby
# based on my old shell function:
# irp () {
# name="$1"
# suffix="${3:+-$3}"
# versioninfo="${2:+-v $2}"
# r="rubygem-$name$suffix"
# test -d $r && return 1
# mkdir $r
# pushd $r
# cp ../gem2rpm.yml .
# if [ -n "$suffix" ]
# then
# echo ":version_suffix: '$suffix'" >> gem2rpm.yml
# fi
# touch ${r}.spec
# osc vc -m "initial package"
# gem fetch --platform=ruby ${2:+-v $2} $name
# gem2rpm --config gem2rpm.yml -o *spec *gem
# osc add $PWD
# ob-tw && osc ci -m "initial package"
# popd
# }
require 'optparse'
require 'optparse/time'
require 'logger'
require 'fileutils'
class InitializeRubyPackage
def initialize()
@log = Logger.new(STDERR)
@log.level = Logger::INFO
@log.info("Welcome to IRP aka initialize ruby package")
@gem_name, @version_info, @version_suffix = nil
@build_repository = 'openSUSE_Tumbleweed'
@build_results = '../rpms'
parse_options
check_for_existing
smash_and_grab
end
def smash_and_grab
initial_message="initial package"
@log.info("Now starting real work")
FileUtils.mkdir(@package_name)
Dir.chdir(@package_name)
gem2rpm_yml = "../gem2rpm.yml"
if File.exist? gem2rpm_yml
@log.info("Found gem2rpm.yml default file. Copying...")
fc = File.read(gem2rpm_yml)
unless @version_suffix.nil?
@log.info("Appending version suffix setting.")
fc += ":version_suffix: '-#{@version_suffix}'"
end
File.write("gem2rpm.yml", fc)
end
@log.debug("Creating empty spec file for g2r")
FileUtils.touch("#{@package_name}.spec")
@log.debug("Creating initial changes file entry")
exec_with_fail(["osc", "vc", "-m", initial_message])
gem_fetch_cmdline = ["gem", "fetch", "--platform=ruby"]
unless @version_info.nil?
gem_fetch_cmdline << '-v'
gem_fetch_cmdline << @version_info
end
gem_fetch_cmdline << @gem_name
exec_with_fail(gem_fetch_cmdline)
exec_with_fail(["g2r"])
exec_with_fail(["osc", "add", Dir.pwd])
exec_with_fail(["osc", "ar"])
exec_with_fail(["osc", "build", "-p", @build_results, '-k', @build_results, @build_repository])
exec_with_fail(["osc", "ci", "-m", initial_message])
end
def exit_with_error(error_code, error_message)
@log.error(error_message)
exit(error_code)
end
def exec_with_fail(cmdline)
unless(system(*cmdline))
exit_with_error(4, "Executing '#{cmdline.join(' ')}' failed.")
end
end
def check_for_existing
@log.info("Checking for existing #{@package_name}")
if File.directory?(@package_name)
exit_with_error(3, "Package #{@package_name} already exists")
end
end
def parse_options
opt_parser = OptionParser.new do |opts|
opts.banner = "Usage: irp [options] [gem name]"
opts.separator ""
opts.separator "Specific options:"
opts.on('-v [version specifier]', 'see gem fetch -v for the parameters') do |version_info|
@version_info = version_info
end
opts.on('-s [package suffix]', 'suffix for the package name') do |suffix|
@version_suffix = suffix
end
opts.on('-b [build repository]', "repository to use for the test build - default #{@build_repository}") do |repo|
@build_repository = repo
end
opts.on('-p [rpms directory]', "directory for built rpms and preferred rpms. default is #{@build_results}") do |args|
@build_results = args
end
end
rest = opt_parser.parse!(ARGV)
if rest.size == 0
exit_with_error(1, "Missing package name")
end
if rest.size > 1
exit_with_error(2, "Too many parameters: #{rest}")
end
@gem_name = rest.first
@package_name = "rubygem-#{@gem_name}"
unless @version_suffix.nil?
@package_name += "-#{@version_suffix}"
end
end
end
InitializeRubyPackage.new()