summary refs log tree commit diff
path: root/pkgs/applications/version-management/redmine/generate_nix_requirements.rb
blob: ed47d52c9c1ba410545f48c1911a51a67baf79e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env ruby

require 'rubygems'
require 'bundler'
require 'fileutils'
require 'net/http'
require 'net/https'
require 'uri'

TMP_DIR = "/tmp/gems"

FileUtils.rm_rf(TMP_DIR) if File.exists?(TMP_DIR)
FileUtils.mkdir TMP_DIR

GEMSERVER = "http://rubygems.org"

# inspect Gemfile.lock
lockfile = Bundler::LockfileParser.new(Bundler.read_file("Gemfile.lock"))

to_mirror = {}

uri = URI(GEMSERVER)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

requirements = {}

lockfile.specs.each do |s|
  possible_gem_name = "#{s.name}-#{s.version.to_s}.gem"

  Dir.chdir TMP_DIR do
    filename = `gem fetch #{s.name} -v #{s.version.to_s}`.split()[1]
    hash = `sha256sum #{filename}.gem`
    url = "#{GEMSERVER}/downloads/#{filename}.gem"
    puts url
    requirements[s.name] = { :version => s.version.to_s, 
                             :hash => hash.split().first,
                             :url => url,}
    
  end
end

filename = 'Gemfile.nix'

File.open(filename, 'w') do |file|
  file.puts "["
  requirements.each do |name, info|
    file.puts "{"
    file.puts ['name = ', '"', name, '";'].join('')
    file.puts ['hash = ', '"', info[:hash], '";'].join('')
    file.puts ['url = ', '"', info[:url], '";'].join('')
    file.puts ['version = ', '"', info[:version], '";'].join('')
    file.puts "}"
  end
  file.puts "]"
end