forked from mirrors/nixpkgs
57 lines
1.3 KiB
Ruby
57 lines
1.3 KiB
Ruby
|
#!/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
|