Skip to content

Instantly share code, notes, and snippets.

@compleatang
Last active December 19, 2015 23:28
Show Gist options
  • Select an option

  • Save compleatang/6034413 to your computer and use it in GitHub Desktop.

Select an option

Save compleatang/6034413 to your computer and use it in GitHub Desktop.
loggemsets
#!/usr/bin/env ruby
#^jist -u 6034413 loggemsets
require 'yaml'
class Exporter
def initialize(file)
@gemsets = `rvm list gemsets strings`.split("\n").reject{|e| e[/default/] || ! e[/@/] || e[/global/]}
@rubies = @gemsets.collect{|e| e.split("@")[0]}.uniq
File.open(file, "w") {|f| f.write( YAML.dump( get_globals.merge( get_gemsets ) ) ); f.close }
end
def get_globals
@globals = @rubies.reduce({}) do |h, v|
v = v + "@global"
h[v] = form_er( v )
h
end
end
def get_gemsets
@gemsets = @gemsets.reduce({}) do |h, v|
r = v.split("@")[0] + "@global"
h[v] = form_er( v ).reject{|e| @globals[r].include?(e)}
h
end
end
def form_er version
t = `rvm #{version} do gem list`.each_line.reduce([]) do |s,e|
f=e.split(" ", 2)
f[1][/\(.+\)/].gsub(/\(|\)/, "").
split(", ").each{|v| s << f[0] + " -v" + v}
s
end
end
end
class Importer
def initialize(file)
@gemsets = YAML.load(IO.read( file ) )
@gemsets.each{|k,v| q = k.split("@"); system "rvm #{q[0]} do rvm gemset create #{q[1]}"; v.each{|pkg| system "rvm #{k} do gem install #{pkg} --no-rdoc --no-ri" } }
end
end
Exporter.new(ARGV[-1]) if ARGV.include?("--export")
Importer.new(ARGV[-1]) if ARGV.include?("--import")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment