<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>activesupport/lib/active_support/backtrace_cleaner.rb</filename>
    </added>
    <added>
      <filename>activesupport/test/clean_backtrace_test.rb</filename>
    </added>
    <added>
      <filename>railties/configs/initializers/backtrace_silencers.rb</filename>
    </added>
    <added>
      <filename>railties/lib/rails/backtrace_cleaner.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -68,9 +68,8 @@ module ActionController #:nodoc:
             logger.fatal(exception.to_s)
           else
             logger.fatal(
-              &quot;\n\n#{exception.class} (#{exception.message}):\n    &quot; +
-              clean_backtrace(exception).join(&quot;\n    &quot;) +
-              &quot;\n\n&quot;
+              &quot;\n#{exception.class} (#{exception.message}):\n  &quot; +
+              clean_backtrace(exception).join(&quot;\n  &quot;) + &quot;\n\n&quot;
             )
           end
         end
@@ -151,13 +150,8 @@ module ActionController #:nodoc:
       end
 
       def clean_backtrace(exception)
-        if backtrace = exception.backtrace
-          if defined?(RAILS_ROOT)
-            backtrace.map { |line| line.sub RAILS_ROOT, '' }
-          else
-            backtrace
-          end
-        end
+        defined?(Rails) &amp;&amp; Rails.respond_to?(:backtrace_cleaner) ? 
+          Rails.backtrace_cleaner.clean(exception.backtrace) : exception.backtrace
       end
   end
 end</diff>
      <filename>actionpack/lib/action_controller/rescue.rb</filename>
    </modified>
    <modified>
      <diff>@@ -20,7 +20,11 @@ module ActionView
     end
 
     def clean_backtrace
-      original_exception.clean_backtrace
+      if defined?(Rails) &amp;&amp; Rails.respond_to?(:backtrace_cleaner)
+        Rails.backtrace_cleaner.clean(original_exception.backtrace)
+      else
+        original_exception.backtrace
+      end
     end
 
     def sub_template_message
@@ -66,8 +70,8 @@ module ActionView
     end
 
     def to_s
-      &quot;\n\n#{self.class} (#{message}) #{source_location}:\n&quot; +
-        &quot;#{source_extract}\n    #{clean_backtrace.join(&quot;\n    &quot;)}\n\n&quot;
+      &quot;\n#{self.class} (#{message}) #{source_location}:\n&quot; + 
+      &quot;#{source_extract}\n    #{clean_backtrace.join(&quot;\n    &quot;)}\n\n&quot;
     end
 
     # don't do anything nontrivial here. Any raised exception from here becomes fatal 
@@ -92,9 +96,4 @@ module ActionView
         end + file_name
       end
   end
-end
-
-if defined?(Exception::TraceSubstitutions)
-  Exception::TraceSubstitutions &lt;&lt; [/:in\s+`_run_.*'\s*$/, '']
-  Exception::TraceSubstitutions &lt;&lt; [%r{^\s*#{Regexp.escape RAILS_ROOT}/}, ''] if defined?(RAILS_ROOT)
-end
+end
\ No newline at end of file</diff>
      <filename>actionpack/lib/action_view/template_error.rb</filename>
    </modified>
    <modified>
      <diff>@@ -291,24 +291,6 @@ class RescueControllerTest &lt; ActionController::TestCase
     assert_equal 'template_error',    templates[ActionView::TemplateError.name]
   end
 
-  def test_clean_backtrace
-    with_rails_root nil do
-      # No action if RAILS_ROOT isn't set.
-      cleaned = @controller.send(:clean_backtrace, @exception)
-      assert_equal @exception.backtrace, cleaned
-    end
-
-    with_rails_root Dir.pwd do
-      # RAILS_ROOT is removed from backtrace.
-      cleaned = @controller.send(:clean_backtrace, @exception)
-      expected = @exception.backtrace.map { |line| line.sub(RAILS_ROOT, '') }
-      assert_equal expected, cleaned
-
-      # No action if backtrace is nil.
-      assert_nil @controller.send(:clean_backtrace, Exception.new)
-    end
-  end
-
   def test_not_implemented
     with_all_requests_local false do
       with_rails_public_path(&quot;.&quot;) do</diff>
      <filename>actionpack/test/controller/rescue_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *2.3.0 [Edge]*
 
+* Added ActiveSupport::BacktraceCleaner to cut down on backtrace noise according to filters and silencers [DHH]
+
 * Added Object#try. ( Taken from http://ozmm.org/posts/try.html ) [Chris Wanstrath]
 
 * Added Enumerable#none? to check that none of the elements match the block #1408 [Damian Janowski]</diff>
      <filename>activesupport/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,7 @@ require 'active_support/callbacks'
 require 'active_support/core_ext'
 
 require 'active_support/buffered_logger'
+require 'active_support/backtrace_cleaner'
 
 require 'active_support/gzip'
 require 'active_support/cache'</diff>
      <filename>activesupport/lib/active_support.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,7 @@ module ActiveSupport
   end
 end
 
+# TODO: Turn all this into using the BacktraceCleaner.
 class Exception # :nodoc:
   def clean_message
     Pathname.clean_within message</diff>
      <filename>activesupport/lib/active_support/core_ext/exception.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,15 +21,21 @@ module ActiveSupport
       Assertion = MiniTest::Assertion
     end
 
+    # TODO: Figure out how to get the Rails::BacktraceFilter into minitest/unit
   # Test::Unit compatibility.
   rescue LoadError
     require 'test/unit/testcase'
     require 'active_support/testing/default'
 
+    if defined?(Rails)
+      require 'rails/backtrace_cleaner'
+      Test::Unit::Util::BacktraceFilter.module_eval { include Rails::BacktraceFilterForTestUnit }
+    end
+
     class TestCase &lt; ::Test::Unit::TestCase
       Assertion = Test::Unit::AssertionFailedError
       include ActiveSupport::Testing::Default
-    end
+    end    
   end
 
   class TestCase
@@ -37,4 +43,4 @@ module ActiveSupport
     include ActiveSupport::Testing::Assertions
     extend ActiveSupport::Testing::Declarative
   end
-end
+end
\ No newline at end of file</diff>
      <filename>activesupport/lib/active_support/test_case.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,7 @@ require 'test/unit'
 gem 'mocha', '&gt;= 0.9.0'
 require 'mocha'
 
+$:.unshift &quot;#{File.dirname(__FILE__)}/../lib&quot;
 require 'active_support'
 require 'active_support/test_case'
 </diff>
      <filename>activesupport/test/abstract_unit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ class ArrayExtAccessTests &lt; Test::Unit::TestCase
     assert_equal array[2], array.third
     assert_equal array[3], array.fourth
     assert_equal array[4], array.fifth
-    assert_equal array[41], array.fourty_two
+    assert_equal array[41], array.forty_two
   end
 end
 </diff>
      <filename>activesupport/test/core_ext/array_ext_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *2.3.0 [Edge]*
 
+* Added Rails.backtrace_cleaner as an accessor for the Rails::BacktraceCleaner instance used by the framework to cut down on backtrace noise and config/initializers/backtrace_silencers.rb to add your own (or turn them all off) [DHH]
+
 * Switch from Test::Unit::TestCase to ActiveSupport::TestCase.  [Jeremy Kemper]
 
 * Added config.i18n settings gatherer to config/environment, auto-loading of all locales in config/locales/*.rb,yml, and config/locales/en.yml as a sample locale [DHH]</diff>
      <filename>railties/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -197,8 +197,10 @@ task :copy_configs do
   
   cp &quot;configs/routes.rb&quot;, &quot;#{PKG_DESTINATION}/config/routes.rb&quot;
 
-  cp &quot;configs/initializers/inflections.rb&quot;, &quot;#{PKG_DESTINATION}/config/initializers/inflections.rb&quot;
-  cp &quot;configs/initializers/mime_types.rb&quot;,  &quot;#{PKG_DESTINATION}/config/initializers/mime_types.rb&quot;
+  cp &quot;configs/initializers/backtrace_silencers.rb&quot;, &quot;#{PKG_DESTINATION}/config/initializers/backtrace_silencers.rb&quot;
+  cp &quot;configs/initializers/inflections.rb&quot;,         &quot;#{PKG_DESTINATION}/config/initializers/inflections.rb&quot;
+  cp &quot;configs/initializers/mime_types.rb&quot;,          &quot;#{PKG_DESTINATION}/config/initializers/mime_types.rb&quot;
+  cp &quot;configs/initializers/new_rails_defaults.rb&quot;,  &quot;#{PKG_DESTINATION}/config/initializers/new_rails_defaults.rb&quot;
 
   cp &quot;configs/locales/en.yml&quot;, &quot;#{PKG_DESTINATION}/config/locales/en.yml&quot;
 </diff>
      <filename>railties/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -39,6 +39,14 @@ module Rails
         nil
       end
     end
+    
+    def backtrace_cleaner
+      @@backtrace_cleaner ||= begin
+        # Relies on ActiveSupport, so we have to lazy load to postpone definition until AS has been loaded
+        require 'rails/backtrace_cleaner'
+        Rails::BacktraceCleaner.new
+      end
+    end
 
     def root
       if defined?(RAILS_ROOT)</diff>
      <filename>railties/lib/initializer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -62,9 +62,10 @@ class AppGenerator &lt; Rails::Generator::Base
       m.template &quot;configs/routes.rb&quot;, &quot;config/routes.rb&quot;
 
       # Initializers
-      m.template &quot;configs/initializers/inflections.rb&quot;, &quot;config/initializers/inflections.rb&quot;
-      m.template &quot;configs/initializers/mime_types.rb&quot;, &quot;config/initializers/mime_types.rb&quot;
-      m.template &quot;configs/initializers/new_rails_defaults.rb&quot;, &quot;config/initializers/new_rails_defaults.rb&quot;
+      m.template &quot;configs/initializers/backtrace_silencers.rb&quot;, &quot;config/initializers/backtrace_silencers.rb&quot;
+      m.template &quot;configs/initializers/inflections.rb&quot;,         &quot;config/initializers/inflections.rb&quot;
+      m.template &quot;configs/initializers/mime_types.rb&quot;,          &quot;config/initializers/mime_types.rb&quot;
+      m.template &quot;configs/initializers/new_rails_defaults.rb&quot;,  &quot;config/initializers/new_rails_defaults.rb&quot;
 
       # Locale
       m.template &quot;configs/locales/en.yml&quot;, &quot;config/locales/en.yml&quot;</diff>
      <filename>railties/lib/rails_generator/generators/applications/app/app_generator.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a026b4c983681b71d876ea37958c3e5bc605acac</id>
    </parent>
  </parents>
  <author>
    <name>David Heinemeier Hansson</name>
    <login>dhh</login>
    <email>david@loudthinking.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/f42c77f927eb49b00e84d355e07de48723d03fcb</url>
  <id>f42c77f927eb49b00e84d355e07de48723d03fcb</id>
  <committed-date>2008-11-22T09:06:08-08:00</committed-date>
  <authored-date>2008-11-22T09:06:08-08:00</authored-date>
  <message>Added ActiveSupport::BacktraceCleaner and Rails::BacktraceCleaner for cutting down on backtrace noise (inspired by the Thoughtbot Quiet Backtrace plugin) [DHH]</message>
  <tree>2a459814a9708f292c99e9c5e99dd41d2d801353</tree>
  <committer>
    <name>David Heinemeier Hansson</name>
    <login>dhh</login>
    <email>david@loudthinking.com</email>
  </committer>
</commit>
