diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb index edca197789..e116580834 100644 --- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb +++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb @@ -471,6 +471,7 @@ def open(filename) File.atomic_write(filename) do |file| if File.extname(filename) == ".gz" zipper = Zlib::GzipWriter.new file + zipper.mtime = 0 yield zipper zipper.flush zipper.close diff --git a/activerecord/test/cases/connection_adapters/schema_cache_test.rb b/activerecord/test/cases/connection_adapters/schema_cache_test.rb index 1a2ca50015..4cbd84c2a9 100644 --- a/activerecord/test/cases/connection_adapters/schema_cache_test.rb +++ b/activerecord/test/cases/connection_adapters/schema_cache_test.rb @@ -334,6 +334,27 @@ def test_marshal_dump_and_load_with_gzip tempfile.unlink end + def test_gzip_dumps_identical + # Create an empty cache. + cache = new_bound_reflection + + tempfile_a = Tempfile.new(["schema_cache-", ".dump.gz"]) + # Dump it. It should get populated before dumping. + cache.dump_to(tempfile_a.path) + digest_a = Digest::MD5.file(tempfile_a).hexdigest + sleep(1) # ensure timestamp changes + tempfile_b = Tempfile.new(["schema_cache-", ".dump.gz"]) + # Dump it. It should get populated before dumping. + cache.dump_to(tempfile_b.path) + digest_b = Digest::MD5.file(tempfile_b).hexdigest + + + assert_equal digest_a, digest_b + ensure + tempfile_a.unlink + tempfile_b.unlink + end + def test_data_source_exist assert @cache.data_source_exists?("courses") assert_not @cache.data_source_exists?("foo")