From e0adab07fb3fbfdec8d7253cc165787a248588da Mon Sep 17 00:00:00 2001 From: Matt Jones Date: Sat, 28 Feb 2009 19:56:14 -0500 Subject: [PATCH] display gem dependencies correctly and unpack exactly once --- railties/lib/rails/gem_dependency.rb | 8 ++++++-- railties/lib/tasks/gems.rake | 7 +++---- railties/test/gem_dependency_test.rb | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/railties/lib/rails/gem_dependency.rb b/railties/lib/rails/gem_dependency.rb index 5a07841..7b3a437 100644 --- a/railties/lib/rails/gem_dependency.rb +++ b/railties/lib/rails/gem_dependency.rb @@ -72,13 +72,15 @@ module Rails rescue Gem::LoadError end - def dependencies + def dependencies(options = {}) return [] if framework_gem? return [] if specification.nil? all_dependencies = specification.dependencies.map do |dependency| GemDependency.new(dependency.name, :requirement => dependency.version_requirements) end - all_dependencies += all_dependencies.map(&:dependencies).flatten + if options[:flatten] + all_dependencies += all_dependencies.map { |d| d.dependencies(options) }.flatten + end all_dependencies.uniq end @@ -149,6 +151,8 @@ module Rails end def unpack_to(directory) + return if specification.nil? || File.directory?(gem_dir(directory)) || framework_gem? + FileUtils.mkdir_p directory Dir.chdir directory do Gem::GemRunner.new.run(unpack_command) diff --git a/railties/lib/tasks/gems.rake b/railties/lib/tasks/gems.rake index e6731ab..aa8fec0 100644 --- a/railties/lib/tasks/gems.rake +++ b/railties/lib/tasks/gems.rake @@ -47,8 +47,8 @@ namespace :gems do require 'rubygems' require 'rubygems/gem_runner' Rails.configuration.gems.each do |gem| - next unless !gem.frozen? && (ENV['GEM'].blank? || ENV['GEM'] == gem.name) - gem.unpack_to(Rails::GemDependency.unpacked_path) if gem.loaded? + next unless ENV['GEM'].blank? || ENV['GEM'] == gem.name + gem.unpack_to(Rails::GemDependency.unpacked_path) end end @@ -59,8 +59,7 @@ namespace :gems do require 'rubygems/gem_runner' Rails.configuration.gems.each do |gem| next unless ENV['GEM'].blank? || ENV['GEM'] == gem.name - gem.dependencies.each do |dependency| - next if dependency.frozen? + gem.dependencies(:flatten => true).each do |dependency| dependency.unpack_to(Rails::GemDependency.unpacked_path) end end diff --git a/railties/test/gem_dependency_test.rb b/railties/test/gem_dependency_test.rb index 9cb02fc..8b761c4 100644 --- a/railties/test/gem_dependency_test.rb +++ b/railties/test/gem_dependency_test.rb @@ -133,7 +133,7 @@ class GemDependencyTest < Test::Unit::TestCase dummy_gem.add_load_paths dummy_gem.load assert dummy_gem.loaded? - assert_equal 2, dummy_gem.dependencies.size + assert_equal 2, dummy_gem.dependencies(:flatten => true).size assert_nothing_raised do dummy_gem.dependencies.each do |g| g.dependencies -- 1.5.3.1