def freeze_rails
new_version = rails_version_to_freeze
version_file = File.join(install_directory,'vendor','rails-version')
vendor_rails = File.join(install_directory,'vendor','rails')
old_version = File.read(version_file).chomp rescue nil
if new_version == old_version
return
elsif old_version != nil
rm_rf(vendor_rails)
end
mkdir_p(vendor_rails)
package_map = {
'rails' => File.join(vendor_rails,'railties'),
'actionmailer' => File.join(vendor_rails,'actionmailer'),
'actionpack' => File.join(vendor_rails,'actionpack'),
'actionwebservice' => File.join(vendor_rails,'actionwebservice'),
'activerecord' => File.join(vendor_rails,'activerecord'),
'activesupport' => File.join(vendor_rails,'activesupport'),
}
specs = Gem.source_index.find_name('rails',[new_version])
unless specs.to_a.size > 0
raise InstallFailed, "Can't locate Rails #{new_version}!"
end
copy_gem(specs.first, package_map[specs.first.name])
specs.first.dependencies.each do |dep|
next unless package_map[dep.name]
dep_spec = Gem.source_index.find_name(dep.name,[dep.version_requirements.to_s])
if dep_spec.size == 0
raise InstallFailed, "Can't locate dependency #{dep.name} #{dep.version_requirements.to_s}"
end
copy_gem(dep_spec.first, package_map[dep.name])
end
File.open(version_file,'w') do |f|
f.puts @@rails_version
end
end