diff --git a/railties/lib/tasks/framework.rake b/railties/lib/tasks/framework.rake index 71aea09..d1827fc 100644 --- a/railties/lib/tasks/framework.rake +++ b/railties/lib/tasks/framework.rake @@ -44,7 +44,23 @@ namespace :rails do version = ENV["RELEASE"] || "edge" target = "rails_#{version}.zip" url = "http://dev.rubyonrails.org/archives/#{target}" + + begin + require "zip/zip" + require "zip/zipfilesystem" + rubyzip = true + rescue LoadError + rubyzip = false + end + + #horrible + system_unzip = `unzip`.inspect == "nil" ? false : true + if system_unzip == false && rubyzip == false + puts "The rubyzip gem was not found, and the system did not have a native unzip command. Please install the rubyzip gem with 'gem install rubyzip'." + exit + end + chdir 'vendor' do puts "Downloading Rails from #{url}" File.open('rails.zip', 'wb') do |dst| @@ -54,10 +70,25 @@ namespace :rails do end end end - - puts 'Unpacking Rails' + + + print 'Unpacking Rails' rm_rf 'rails' - `unzip rails.zip` + if system_unzip + `unzip rails.zip` + else + Zip::ZipFile.open('rails.zip') do |zip| + zip.each do |entry| + fpath = File.join(pwd, 'rails', entry.name) + FileUtils.mkdir_p(File.dirname(fpath)) + zip.extract(entry, fpath) + $stdout.print "." + $stdout.flush + end + end + puts "" + end + %w(rails.zip rails/Rakefile rails/cleanlogs.sh rails/pushgems.rb rails/release.rb).each do |goner| rm_f goner end