Module: Gem2Rpm

Defined in:
lib/gem2rpm.rb,
lib/gem2rpm/distro.rb,
lib/gem2rpm/format.rb,
lib/gem2rpm/helpers.rb,
lib/gem2rpm/package.rb,
lib/gem2rpm/dependency.rb,
lib/gem2rpm/spec_fetcher.rb,
lib/gem2rpm/specification.rb

Defined Under Namespace

Modules: Helpers Classes: Dependency, Distro, DownloadUrlError, Exception, Format, Package, SpecFetcher, Specification

Constant Summary collapse

VERSION =
"0.10.1"
TEMPLATE =
File.read File.join(template_dir, "#{Distro.nature.to_s}.spec.erb")

Class Method Summary collapse

Class Method Details

.convert(fname, template = TEMPLATE, out = $stdout, nongem = true, local = false, doc_subpackage = true) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/gem2rpm.rb', line 33

def Gem2Rpm.convert(fname, template=TEMPLATE, out=$stdout,
                    nongem=true, local=false, doc_subpackage = true)
  package = Gem2Rpm::Package.new(fname)
  # Deprecate, kept just for backward compatibility.
  format = Gem2Rpm::Format.new(package)
  spec = Gem2Rpm::Specification.new(package.spec)
  spec.description ||= spec.summary
  download_path = ""
  unless local
    begin
      download_path = find_download_url(spec.name, spec.version)
    rescue DownloadUrlError => e
      $stderr.puts "Warning: Could not retrieve full URL for #{spec.name}\nWarning: Edit the specfile and enter the full download URL as 'Source0' manually"
      $stderr.puts e.inspect
    end
  end
  template = ERB.new(template, 0, '-')
  out.puts template.result(binding)
rescue Gem::Exception => e
  puts e
end

.find_download_url(name, version) ⇒ Object

Raises:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/gem2rpm.rb', line 15

def self.find_download_url(name, version)
  dep = Gem::Dependency.new(name, "=#{version}")
  fetcher = Gem2Rpm::SpecFetcher.new(Gem::SpecFetcher.fetcher)

  spec_and_source, errors = fetcher.spec_for_dependency(dep, false)

  raise DownloadUrlError.new(errors.first.error.message) unless errors.empty?

  spec, source = spec_and_source.first

  if source && source.uri
    download_path = source.uri.to_s
    download_path += "gems/"
  end

  download_path
end

.packagerObject

Returns the email address of the packager (i.e., the person running gem2spec). Taken from RPM macros if present, constructed from system username and hostname otherwise.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/gem2rpm.rb', line 58

def Gem2Rpm.packager()
  packager = `rpmdev-packager`.chomp rescue ''

  if packager.empty?
    packager = `rpm --eval '%{packager}'`.chomp rescue ''
  end

  if packager.empty? or packager == '%{packager}'
    passwd_entry = Etc::getpwnam(Etc::getlogin)
    packager = "#{(passwd_entry && passwd_entry.gecos) || Etc::getlogin } <#{Etc::getlogin}@#{Socket::gethostname}>"
  end

  packager
end

.template_dirObject



73
74
75
# File 'lib/gem2rpm.rb', line 73

def Gem2Rpm.template_dir
  File.join(File.dirname(__FILE__), '..', 'templates')
end