From a5311ee86bffad3f0bce00babd1ff5d78ec85618 Mon Sep 17 00:00:00 2001
From: Piotr Sarnacki <drogus@gmail.com>
Date: Thu, 28 Oct 2010 20:25:20 +0200
Subject: Make deep copy of application generators on engine initialization.

Otherwise nested hashes will be same objects for both application and engine,
which will result in overwriting each others values on changes.
---
 railties/lib/rails/configuration.rb        | 8 ++++++++
 railties/lib/rails/engine/configuration.rb | 2 +-
 railties/test/railties/engine_test.rb      | 3 +++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index 8369795e71..66fab0a760 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -1,5 +1,6 @@
 require 'active_support/deprecation'
 require 'active_support/ordered_options'
+require 'active_support/core_ext/hash/deep_dup'
 require 'rails/paths'
 require 'rails/rack'
 
@@ -51,6 +52,13 @@ module Rails
         @colorize_logging = true
       end
 
+      def initialize_copy(source)
+        @aliases = @aliases.deep_dup
+        @options = @options.deep_dup
+        @fallbacks = @fallbacks.deep_dup
+        @templates = @templates.dup
+      end
+
       def method_missing(method, *args)
         method = method.to_s.sub(/=$/, '').to_sym
 
diff --git a/railties/lib/rails/engine/configuration.rb b/railties/lib/rails/engine/configuration.rb
index 5607628d96..4f458b0aee 100644
--- a/railties/lib/rails/engine/configuration.rb
+++ b/railties/lib/rails/engine/configuration.rb
@@ -10,7 +10,7 @@ module Rails
       def initialize(root=nil)
         super()
         @root = root
-        @generators = app_generators
+        @generators = app_generators.dup
       end
 
       # Returns the middleware stack for the engine.
diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb
index 3509f964eb..822be24ef1 100644
--- a/railties/test/railties/engine_test.rb
+++ b/railties/test/railties/engine_test.rb
@@ -701,6 +701,9 @@ module RailtiesTest
       generators = Bukkits::Engine.config.generators.options[:rails]
       assert_equal :active_record, generators[:orm]
       assert_equal :rspec        , generators[:test_framework]
+
+      app_generators = Rails.application.config.generators.options[:rails]
+      assert_equal :test_unit    , app_generators[:test_framework]
     end
   end
 end
-- 
cgit v1.2.3