about summary refs log tree commit diff
path: root/pkgs/applications/version-management/redmine/generate_nix_requirements.rb
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/version-management/redmine/generate_nix_requirements.rb')
-rw-r--r--pkgs/applications/version-management/redmine/generate_nix_requirements.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/pkgs/applications/version-management/redmine/generate_nix_requirements.rb b/pkgs/applications/version-management/redmine/generate_nix_requirements.rb
new file mode 100644
index 000000000000..ed47d52c9c1b
--- /dev/null
+++ b/pkgs/applications/version-management/redmine/generate_nix_requirements.rb
@@ -0,0 +1,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