diff options
| author | Steve Klabnik <steve@steveklabnik.com> | 2013-02-26 11:15:29 -0800 | 
|---|---|---|
| committer | Steve Klabnik <steve@steveklabnik.com> | 2013-02-26 11:15:29 -0800 | 
| commit | 95883ca4b1178a423c68ab5cc4bcac50f06551ec (patch) | |
| tree | 02d354c8f402be5ac1eefe27ce3b63e311ebebd3 | |
| parent | 2fa9c8881f0c793185071ef6575433df75c6fb14 (diff) | |
| parent | b8837066dcaa389c00aaf22565bb6988ded3932e (diff) | |
| download | rails-95883ca4b1178a423c68ab5cc4bcac50f06551ec.tar.gz rails-95883ca4b1178a423c68ab5cc4bcac50f06551ec.tar.bz2 rails-95883ca4b1178a423c68ab5cc4bcac50f06551ec.zip | |
Merge pull request #9329 from chuckbjones/fix-cache-delete-rc
Fix deletion of empty directories
| -rw-r--r-- | activesupport/CHANGELOG.md | 2 | ||||
| -rw-r--r-- | activesupport/lib/active_support/cache/file_store.rb | 4 | ||||
| -rw-r--r-- | activesupport/test/caching_test.rb | 12 | 
3 files changed, 16 insertions, 2 deletions
| diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index e76af6adc4..c280a782c0 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -3,6 +3,8 @@  ## Rails 4.0.0.beta1 (February 25, 2013) ## +*   Fix deletion of empty directories in ActiveSupport::Cache::FileStore. *Charles Jones* +  *   Prevent `DateTime#change` from truncating the second fraction, when seconds      do not need to be changed. diff --git a/activesupport/lib/active_support/cache/file_store.rb b/activesupport/lib/active_support/cache/file_store.rb index 8e265ad863..0c55aa8a32 100644 --- a/activesupport/lib/active_support/cache/file_store.rb +++ b/activesupport/lib/active_support/cache/file_store.rb @@ -150,9 +150,9 @@ module ActiveSupport          # Delete empty directories in the cache.          def delete_empty_directories(dir) -          return if dir == cache_path +          return if File.realpath(dir) == File.realpath(cache_path)            if Dir.entries(dir).reject {|f| EXCLUDED_DIRS.include?(f)}.empty? -            File.delete(dir) rescue nil +            Dir.delete(dir) rescue nil              delete_empty_directories(File.dirname(dir))            end          end diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb index 5158bbc196..ede08e23d5 100644 --- a/activesupport/test/caching_test.rb +++ b/activesupport/test/caching_test.rb @@ -672,6 +672,18 @@ class FileStoreTest < ActiveSupport::TestCase      end    end +  def test_delete_does_not_delete_empty_parent_dir +    sub_cache_dir = File.join(cache_dir, 'subdir/') +    sub_cache_store = ActiveSupport::Cache::FileStore.new(sub_cache_dir) +    assert_nothing_raised(Exception) do +      assert sub_cache_store.write('foo', 'bar') +      assert sub_cache_store.delete('foo') +    end +    assert File.exist?(cache_dir), "Parent of top level cache dir was deleted!" +    assert File.exist?(sub_cache_dir), "Top level cache dir was deleted!" +    assert Dir.entries(sub_cache_dir).reject {|f| ActiveSupport::Cache::FileStore::EXCLUDED_DIRS.include?(f)}.empty? +  end +    def test_log_exception_when_cache_read_fails      File.expects(:exist?).raises(StandardError, "failed")      @cache.send(:read_entry, "winston", {}) | 
